【问题标题】:knockout mapping淘汰赛映射
【发布时间】:2012-08-31 17:39:55
【问题描述】:

编辑 看起来我现在从服务器加载了它。如果有人看到这方面的任何问题,很想听听。

在使淘汰赛映射插件正常工作时遇到一些问题。我可以毫无问题地使用静态数据,请参阅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);

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

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

    ko.mapping.fromJS(data, {}, viewModel);
    

    ..而不是..

    ko.mapping.fromJS(data, viewModel);
    

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

    是的,原来的首选药物是一个正常的数组,而新的首选药物是一个可观察数组。 如果您尝试直接访问 observable 数组,它看起来就像一个空数组。然而,observables 是函数,需要这样对待。

    所以...

    console.log(myViewModel.preferredDrugs);
    

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

    console.log(myViewModel.preferredDrugs());
    

    ...返回实际的数组。

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 2012-12-05
      • 2015-03-30
      • 2017-07-07
      • 2014-03-26
      • 2014-03-20
      • 2015-07-16
      • 2013-08-05
      相关资源
      最近更新 更多