【问题标题】:knockout observableArray push - not pushing to array淘汰 observableArray push - 不推送到数组
【发布时间】:2012-08-22 11:37:01
【问题描述】:

尝试玩 Knockout,但在推送到可观察数组时遇到问题。我下面的代码通过单击按钮从服务器获取一些 json 数据,它返回一个对象数组。第一个 console.log 控制台很好,我的对象数组很好,花花公子。

但是,我似乎无法将每个对象都推送到我的可观察数组中。控制台向我显示空数组。我尝试了几种变体,但感觉我只是错过了一些简单的东西,但我很难找到它。

我要做的是从服务器加载一些数据,将其放入一个可观察的数组中,我可以将其绑定到模板并执行类似 foreach 之类的操作来输出数组的内容。

$(function() {
    $('#load').click(function() {
        $.getJSON('/PreferredDrugList/service/preferredDrugs/y', function(data) {
            $(data.preferredDrugs).each(function(index, obj) {
                console.log(obj);
                $('#result').append('<p>' + (++index) + ') ' + obj.drugName + ' : ' + obj.dosageFormDesc + '</p>');

                myViewModel.drugList.push(obj);
                console.log(myViewModel.drugList);
            });
        });//end getJSON
    });//end load

});//end ondomready

var myViewModel = {
    drugList: ko.observableArray()  //list of drug names
};

ko.applyBindings(myViewModel);

【问题讨论】:

  • 你的意思可能是console.log(myViewModel.drugList());
  • 在这方面似乎没有什么不同,仍然得到空数组的安慰。
  • 废话,我的错,一定是缓存问题,它现在似乎工作了!现在我只需要弄清楚如何让我的 foreach:drugList 进行渲染。

标签: knockout.js observable ko.observablearray


【解决方案1】:

看看以下内容:http://jsfiddle.net/qszZD/

你在上面的评论中提到你需要让你的 foreach 工作。希望这对您来说是一个好的开始。我正在使用一些东西,你可能想也可能不想照顾:

knockoutJS.mapping

我正在使用可选的 mappingOptions 来定义基于映射库返回的数据的计算 observables。通过使用 KO 映射,无需手动将元素推送到您的可观察数组中,映射库将自动为您处理,并且还使您能够通过提供映射选项来进一步扩展您的模型以创建额外的计算字段。

如果您有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2016-07-13
    相关资源
    最近更新 更多