淘汰赛映射

mag*_*nta 1 knockout-mapping-plugin knockout.js

编辑看起来我现在从服务器加载它.如果有人发现任何问题,我们很乐意听到他们的消息.

有一些问题让淘汰映射插件工作.我可以使用静态数据,没有任何问题,请参阅http://jsfiddle.net/RH9wQ/

当我尝试从服务器加载数据时,它似乎不起作用.下面是我正在使用的简单代码.jsfiddle中的数据是从我的服务器返回的确切数据.我错过了一些完全明显的东西吗

我正在做的是根据点击的alpha按钮加载不同的药物.因此,单击"y"并获取以y开头的药物列表,单击"z"并获取以z开头的药物列表.单击按钮/加载数据时,我想用来自服务器的内容替换我的viewModel数据.

另外,请注意jsfiddle页面上的控制台,数据看起来很好(8个数组元素和count = 8),但请注意viewModel的控制台,preferredDrugs和count是不同的,有人知道这是为什么吗?

$(function() {
    $('.load').click(function() {
        var $letter = $(this).attr('value');

        //show spinner
        $('#loading').show();

        //load in drug list data
        $.getJSON('/PreferredDrugList/service/preferredDrugs/' + $letter, function(data) {
            //hide spinner
            $('#loading').hide();

            console.log(data);
            //create observable properties for each of the properties on data
            ko.mapping.fromJS(data, viewModel);
            console.log(viewModel);

        });
    });

});//end ondomready

//default data
var data = {
    preferredDrugs: [],
    count: 0
};

var viewModel = ko.mapping.fromJS(data);

ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

使用ko.mapping您更新现有视图模型时,还可以尝试:

ko.mapping.fromJS(data, {}, viewModel);
Run Code Online (Sandbox Code Playgroud)

..代替..

ko.mapping.fromJS(data, viewModel);
Run Code Online (Sandbox Code Playgroud)

另外,请注意jsfiddle页面上的控制台,数据看起来很好(8个数组元素和count = 8),但请注意viewModel的控制台,preferredDrugs和count是不同的,有人知道这是为什么吗?

是的,原始的首选药物是正常的阵列,而新的首选药物是可观察的阵列.如果您尝试直接访问它,则可观察数组看起来像一个空数组.但是,可观察性是功能,需要对其进行处理.

所以...

console.log(myViewModel.preferredDrugs);
Run Code Online (Sandbox Code Playgroud)

...返回一个空数组,而...

console.log(myViewModel.preferredDrugs());
Run Code Online (Sandbox Code Playgroud)

...返回实际的数组.