0

Knockout.js、require.js などを使用して MVVM Web アプリに取り組んでいます。問題は、ビューモデルのプロパティ (オブザーバブル配列の型) 内のアイテムにアクセスできないことです。

サンプル契約モデル:

define('model.contract', ['ko'],
    function (ko) {
        var Contract = function () {
            var self = this;
            self.id = ko.observable();
            self.subject = ko.observable().extend({ required: true });

            self.shoppingItems = ko.observableArray();

           };
           return Contract;
    });

サンプル ビュー モデル:

define('vm.contract', ['ko'],
    function (ko) {
        var contract = ko.observable(), // Is initialised as viewmodel activates

            deleteCmd = function () {

                var selectedId = getSelectedId(),
                    deletedId = contract.shoppingItems.remove(function (item) { return item.id === selectedId; });

                alert('Item ' + deletedId[0].id + ' was deleted!');
            };

        return {
            contract: contract,
            deleteCmd: deleteCmd
        };
    });

サンプル ビュー:

<div data-bind="template: {name: shoppingItemTemplate, foreach: contract().shoppingItems}"></div>
<button data-bind="click: deleteCmd">Delete Selected</button>

ビューモデルでアクセスする必要があるのはcontract.shoppingItemsすべて未定義です。

4

1 に答える 1

0

なぜあなたはあなたをただではなくcontractとして定義したのですか?observableArrayobservable

また、 observablecontract()の値を取得するために呼び出す必要があることを忘れないでください。contract

// ...
deletedId = contract().shoppingItems.remove(function (item) { return item.id === selectedId; });
// ...

更新:あなたが不適切に定義したことに気づきましたmodel.contractreturn Contract定義ブロックの外側に配置しますContract:)

define('model.contract', ['ko'],
    function (ko) {
        var Contract = function () {
            var self = this;
            self.id = ko.observable();
            self.subject = ko.observable().extend({ required: true });

            self.shoppingItems = ko.observableArray();
         };

        return Contract;
    }
);
于 2013-03-16T10:23:04.363 に答える