knockout observableArray push - 不推送到阵列

时间:2012-08-28 00:05:42

标签: knockout.js observable ko.observablearray

开始玩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);

1 个答案:

答案 0 :(得分:2)

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

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

knockoutJS.mapping

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

如果您有任何问题,请与我们联系。