无法解析绑定敲除错误

时间:2013-02-20 20:24:35

标签: asp.net-mvc knockout.js knockout-mapping-plugin knockout-2.0

我正在使用淘汰赛,并遇到了一个我不知道如何修复的问题。我从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; 绑定值:visible:hasItems === false

我不知道为什么 - 我是新手,所以非常感谢任何帮助?

3 个答案:

答案 0 :(得分:2)

applyBindings需要一个对象。尝试

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

此外,当你想获得一个observable的值时,你需要使用括号。

return self.NumberOfItems() > 0;

http://jsfiddle.net/36xtR/

答案 1 :(得分:0)

除了ckal回答你可能也想用这种方式使用ko.mappings:

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

答案 2 :(得分:0)

您看到的'无法解析绑定'的错误意味着敲除无法找到您尝试绑定的内容(hasItems)。

我认为这是因为你只是在调用load函数时创建viewModel,但是在解析绑定时viewModel不存在,所以它会抱怨。

我会尝试更像这样设置你的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中调用load函数来代替调用当前加载函数的位置。