【问题标题】:Property is not defined属性未定义
【发布时间】:2013-02-07 20:55:43
【问题描述】:

我试图理解淘汰赛的语法并遇到问题。

我的 ko 视图模型示例

var Market = function (e) {
    var self = this;
    self.MarketId = ko.observable(e ? e.MarketId : '');
    self.Description = ko.observable(e ? e.Description : '');
};

var MarketAddViewModel = function () {
    var self = this;
    var url = "/api/market";

    self.newMarket = ko.observable(new Market());

    // Save market
    saveMarket = function (item) {
        $.ajax({
            type: 'POST',
            url: url,
            data: ko.toJS(item),
            success: function (data) {
                // SUCCESS
            },
            error: function (err) {
                var err = JSON.parse(err.responseText);
                var errors = "";
                for (var key in err) {
                    if (err.hasOwnProperty(key)) {
                        errors += key.replace("employee.", "") + " : " + err[key];
                    }
                }

                alert('error');
                //$("<div></div>").html(errors).dialog({ modal: true, title: JSON.parse(err.responseText).Message, buttons: { "Ok": function () { $(this).dialog("close"); } } }).show();
            },
            complete: function () {
                // complete
            }
        });
    };
};

要绑定它,我使用此代码

 $(document).ready(function () {
            ko.applyBindings(new MarketAddViewModel());
        });

然后是 HTML 元素

<input data-bind="value: Description" type="text" class="required input-xxlarge" name="description" id="description" />

但是当我加载这个页面时,我收到“描述未定义”

有什么线索吗?

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

    您可以使用 with 绑定,它将子元素的上下文更改为 newMarket 上下文

    <div data-bind="with: newMarket">
        <input data-bind="value: Description" type="text" class="required input-xxlarge" name="description" id="description" />
    </div>
    

    编辑:我也可以借此机会为我的配置库的约定做一些 PR 上面的语法看起来像

    <div data-name="newMarket">
        <input data-name="Description" type="text" class="required input-xxlarge" name="description" id="description" />
    </div>
    

    https://github.com/AndersMalmgren/Knockout.BindingConventions

    【讨论】:

      【解决方案2】:

      我觉得应该是

      <input data-bind="value: newMarket().Description" type="text" class="required input-xxlarge" name="description" id="description" />
      

      (注意newMarket().)因为它是MarketAddViewModel 实例的属性。括号将提取可观察值,以便可以提取其“描述”属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多