我有以下内容:
this.testArray = ko.observableArray(["a", "b"]);
this.publishedSelectedSets = ko.observableArray().subscribeTo("SELECTED_SETS");
然后在我看来,我有:
<span data-bind="text: testArray "></span>
<span data-bind="text: publishedSelectedSets "></span>
我希望看到a,b
,然后看一下publishSelectedSets(只是数字)的内容列表,但显示的是:
SELECTED SET IDS:a,b
function observable(){if(arguments.length&gt; 0){// Write // Ignore 如果值没有改变则写入 ((!observable ['equalityComparer'])|| !observable ['equalityComparer'](_ latestValue,arguments [0])){ observable.valueWillMutate(); _latestValue = arguments [0]; if(DEBUG) observable._latestValue = _latestValue; observable.valueHasMutated(); 返回这个; //允许链式赋值} else {//读取 ko.dependencyDetection.registerDependency(观察到的); // 呼叫者,召集者 只有在进行“读取”操作时才需要通知变更 return _latestValue; }}
我尝试在publishedSelectedSets()
的末尾添加括号,但我得到同样的结果。我可以使用调试器来查看_latestValue
数组的publishedSelectedSets
正确更新,但数据未在DOM中正确显示。
我做错了什么?
SELECTED_SETS:
this.selectedSets = ko.computed(
function () {
return ko.utils.arrayMap(ko.utils.arrayFilter(vm.data.sets(), function (set) {
return set.isSelected();
}), function (set) { return set.setId; });
}).publishOn("SELECTED_SETS");
正在使用的JSFiddle,简化了ko.utils.arrayMap的使用:http://jsfiddle.net/PTSkR/80/
仍然无法弄清楚为什么我的代码无效...
答案 0 :(得分:1)
您的publishedSelectedSets
数组包含ko.observable
函数,这就是您获得奇怪输出的原因。
由于你的map方法,你的数组中有可观察的函数:
function (set) { return set.setId; }
使用set.setId
而不是其值返回可观察函数本身。
要修复它,只需输出()
function (set) { return set.setId(); }