问题描述
use warnings;
use strict;
my @array = (0,undef,3);
if (grep {! defined} @array) {
print "undefined values in array\n";
}
我遇到的一个问题是class QuestionnaireMultiselectCheckBoxWrapperStore = _QuestionnaireMultiselectCheckBoxWrapperStore
with _$QuestionnaireMultiselectCheckBoxWrapperStore;
abstract class _QuestionnaireMultiselectCheckBoxWrapperStore with Store {
final QuestionRes questionData;
final QuestionObservable questionStore;
Reactiondisposer _validationdisposer;
_QuestionnaireMultiselectCheckBoxWrapperStore(
{this.questionData,this.questionStore}) {
answerIds =
questionStore.answerIds.map((e) => e.id).toList().asObservable();
_validationdisposer = reaction((_) => answerIds,validateAnswerIds);
}
void dispose() => _validationdisposer?.reaction?.dispose();
//-----
@observable
ObservableList<int> answerIds;
@action
void setAnswerId(int id,bool remove) {
if (remove)
answerIds.removeWhere((e) => e == id);
else
answerIds.add(id);
questionStore.setAnswerId(id,remove);
}
@observable
String errorText;
@action
void validateAnswerIds(ObservableList<int> answers) {
if (answers.isEmpty && questionData.isMandatory) {
errorText = "ANSWER_required_ERROR";
} else
errorText = null;
}
}
所做的更改后未触发validateAnswerIds
可以通过将validateAnswerIds
函数更改为以下内容来解决此问题:
setAnswerId
因此基本上是通过放弃ObservableList的主要功能来实现的,该功能主要是对元素的操作做出反应,从而有利于更改对对象的引用。可以在常规 @action
void setAnswerId(int id,bool remove) {
var tmpList = List<int>();
tmpList.addAll(answerIds);
if (remove) {
tmpList.removeWhere((e) => e == id);
} else {
tmpList.add(id);
}
answerIds = tmpList;
questionStore.setAnswerId(id,remove);
}
上完成。这使List
毫无用处,因此肯定有一个我几乎没有错过的收获。
在列表中添加项目,删除项目或在某个索引处修改项目时,列表不会通知MobX。要获得反应性行为,必须使用ObservableList。
那么我的代码中是否有错误,或者ObservableList
的使用意图与我不同?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)