1

我有以下内容:

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然后是publishedSelectedSets 的内容列表(只是数字),但显示的是:

选定集 ID:a,b

function observable() { if (arguments.length > 0) { // 写入 // 如果值没有改变则忽略写入 if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue , arguments[0])) { observable.valueWillMutate(); _latestValue = 参数[0]; if (DEBUG) observable._latestValue = _latestValue; observable.valueHasMutated(); } 返回这个;// 允许链式赋值 } else { // 读取 ko.dependencyDetection.registerDependency(observable); // 如果调用者进行了“读取”操作,则只需通知调用者更改 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/

仍然无法弄清楚为什么我的代码不起作用......

4

1 回答 1

2

您的publishedSelectedSets数组包含ko.observable函数,这就是您得到奇怪输出的原因。

由于您的 map 方法,您的数组中有可观察的函数:

function (set) { return set.setId; }

你在哪里返回可观察函数本身,set.setId而不是它的值。

要修复它,只需推出()

function (set) { return set.setId(); }
于 2013-05-28T16:31:49.190 回答