3

尝试玩 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);
4

1 回答 1

2

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

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

淘汰赛JS.mapping

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

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

于 2012-08-28T21:21:18.443 回答