【问题标题】:How do I access an object by index in a knockout observablearray? Unable to process binding如何通过淘汰 observablearray 中的索引访问对象?无法处理绑定
【发布时间】:2016-05-09 15:25:43
【问题描述】:

我是 stackoverflow 和淘汰赛的新手,我有一个问题。我想通过索引访问 JSON 对象。如果我在我的代码中添加虚拟数据它工作正常,但如果我从 JSON 添加数据并停止它会给我一个错误。

错误 未捕获的类型错误:无法处理绑定“文本:函数 (){return Ads()[0].AdContent }”消息:无法读取未定义的属性“AdContent”

我的视图模型:

function AdListModel () {
    var self = this;
    self.Ads = ko.observableArray([]);
    $.ajax({
        type: "GET",
        url: '/Home/GetAllAds',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            self.Ads(data); 
        },
        error: function (err) {
            alert(err.status + " : " + err.statusText);
        }
    });
}

ko.applyBindings(new AdListModel());

我收到的 JSON

[{"AdId":6,"AdContent":"sadasdasdsad","CategoryId":1,"CategoryNameRU":"Дом, стройка, ремонт"},{"AdId":12,"AdContent":"asdasd","CategoryId":1,"CategoryNameRU":"Дом, стройка, ремонт"}]

我的 HTML

   <div data-bind="text: Ads()[0].AdContent"></div>

   <div data-bind="foreach: Ads">   
      <p data-bind="text: AdId"></p>
      <p data-bind="text: AdContent"></p>
      <p data-bind="text: CategoryId"></p>
      <p data-bind="text: CategoryNameRU"></p>
   </div>

所以,基本上我只想读取索引为 0 的 JSON 对象中的一个属性,然后显示所有数组。

【问题讨论】:

    标签: javascript jquery json knockout.js


    【解决方案1】:

    “广告”数组是空的,直到您在 ajax 调用上没有得到响应。因此“Ads()[0]”是未定义的。

    您可以在绑定中使用附加检查:

    <!-- ko if: Ads().length > 0 -->
    <div data-bind="text: Ads()[0].AdContent"></div>
    <!-- /ko -->
    

    注意:“foreach”绑定正确处理空数组。

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2016-01-22
      • 2015-03-23
      • 2014-05-29
      • 2017-10-24
      相关资源
      最近更新 更多