Knockout数组显示为函数,而不是内容

时间:2013-05-28 15:53:20

标签: knockout.js knockout-postbox

我有以下内容:

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/

仍然无法弄清楚为什么我的代码无效...

1 个答案:

答案 0 :(得分:1)

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

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

function (set) { return set.setId; }

使用set.setId而不是其值返回可观察函数本身。

要修复它,只需输出()

即可
function (set) { return set.setId(); }