4

ノックアウトを使用していますが、修正方法がわからない問題に遭遇しました。asp.net mvc コントローラーから json オブジェクトを取得します。次の関数に渡します。

load = function (data) {
        var myViewModel = function () {
            var self = this;

            ko.mapping.fromJS(data, self);

            self.hasItems = ko.computed(function () {
                return self.NumberOfItems > 0;
            }, self);

        };
        ko.applyBindings(myViewModel, window.document.getElementById("my-container"));
    }

json で返される内容、特に json の NumberOfItems プロパティに基づいて、モデル オブジェクトにカスタム動作を追加しています。私のマークアップは次のとおりです。

 <div class="content" style="display: none;" data-bind="visible: hasItems === false">
    <span class="empty">My Items</span>
</div>

しかし、私はこのエラーを受け取り続けます:

エラー: バインディングを解析できません。メッセージ: ReferenceError: hasItems が定義されていません。バインディング値: 可視: hasItems === false

理由がわかりません-私はこれが初めてなので、何か助けていただければ幸いです。

4

3 に答える 3

2

applyBindings にはオブジェクトが必要です。試す

ko.applyBindings(new myViewModel(), window.document.getElementById("my-container"));

また、オブザーバブルの値を取得する場合は、括弧を使用する必要があります。

return self.NumberOfItems() > 0;

http://jsfiddle.net/36xtR/

于 2013-02-20T21:05:58.693 に答える
0

「バインドを解析できません」というエラーは、ノックアウトがバインドしようとしているもの (hasItems) を見つけられないことを意味します。

これは、ロード関数が呼び出されたときにのみビューモデルを作成しているためだと思いますが、バインディングが解析されているときにビューモデルが存在しないため、文句を言います。

viewModel を次のように設定してみます。

var myViewModel = function () {
        var self = this;

        self.load = function (data) {
            ko.mapping.fromJS(data, self);
        }

        self.hasItems = ko.computed(function () {
            return self.NumberOfItems > 0;
        }, self);

    };
ko.applyBindings(new myViewModel(), window.document.getElementById("my-container"));

次に、現在のロード関数を呼び出している場所の代わりに、viewModel でロード関数を呼び出すことができます。

于 2013-02-20T21:29:39.230 に答える