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) { // Write // 値が変更されていない場合は書き込みを無視する if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue 、引数[0])) { observable.valueWillMutate(); _latestValue = 引数[0]; (DEBUG) observable._latestValue = _latestValue の場合。observable.valueHasMutated(); これを返します。// 連鎖代入を許可します } else { // 読み取ります ko.dependencyDetection.registerDependency(observable); // 呼び出し元は、「読み取り」操作を行った場合にのみ変更を通知する必要があります return _latestValue; } }

の最後に括弧を追加しようとしましたpublishedSelectedSets()が、同じことが得られます。デバッガーを使用して配列が_latestValue正しく更新されていることを確認できますが、DOM でデータが正しく表示されません。publishedSelectedSets

私は何を間違っていますか?

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");

ko.utils.arrayMap の単純化された使用で動作している JSFiddle: 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 に答える