1

以下は、2つのノックアウトテンプレートプラグインとplugin2です。どちらもko.computedobservablesに依存しており、両方のobservablesのdeferEvaluationプロパティがtrueに設定されています。プラグインはレンダリングされませんが、plugin2レンダリングされます。

プラグインをレンダリングするために何を変更する必要がありますか(deferEvaluation == trueを維持)?

ここでフィドルhttp://jsfiddle.net/jeljeljel/YKLGM/

HTML

<div id="plugin" data-bind="template: { name: 'template1', data: $data }" ></div>
<div id="plugin2" data-bind="template: { name: 'template2', data: $data }" ></div>

<script type="text/html" id="template1">
    <div data-bind="foreach: columns()">
        <span data-bind="text: displayText"></span>
    </div>
</script>

<script type="text/html" id="template2">
    <div data-bind="text: dataItem" ></div>
</script>

Javascript

var gridData = {
    columns: [{
        displayText: 'Name'
    }, {
        displayText: 'Last Login Date'
    }, {
        displayText: 'Email'
    }]
};

function DataModel() {
    var self = this;

    self.columns = ko.observableArray([]);

    self.loadGrid = ko.computed({
        read: function () {
            self.columns(gridData.columns);
        },
        owner: this,
        deferEvaluation: true
    });

    self.id = ko.observable(1);

    self.dataItem = ko.computed({
        read: function () {
            return self.id() * 3;
        },
        owner: this,
        deferEvaluation: true
    });
}

dataModel = new DataModel();
ko.applyBindings(dataModel);
4

1 に答える 1

1

どちらもko.computedobservablesに依存しています

いいえそうではありません。pluginにのみ依存しますcolumns。これは、入力されることのない空のobservableArrayです。たぶん、どこかで計算されたオブザーバブルを使用する必要があります。loadGrid

ちなみに、loadGrid現在の状態で計算されたオブザーバブルとしてはあまり意味がなく、readメソッドは何も返しません。

于 2013-02-18T23:22:54.930 に答える