Knockoutjs嵌套视图模型

时间:2015-04-16 11:03:06

标签: javascript ajax knockout.js


我正在使用Knockoutjs并且在子模型中访问根/父模型数据时遇到问题。我通过Ajax获得的数据。

Ajax的成功创建了一个新的WeekViewModel,这会创建一些RowViewModel。这是我的问题,此时week未定义。

渲染网站后,我可以通过week获取信息 我发现的唯一解决方案是将父节点和根节点粘贴到子模型中。 但这种方法效果不是很好,因为在初始化时,父级是一个普通的js Obeject。渲染网站后,我将从click事件粘贴另一个rowViewModel,父级是一个淘汰对象。

任何人都可以给我一些建议,我发错了吗?或者是什么方法来解决这个问题?!

这是我的代码:

$(function() {
    var week;
    var weekData;

    $.when(
        $.get('js/dataNew.json', function (res) {
            weekData = res;
        }),
        // another calls ...

        ).then(function () {
            week = new WeekViewModel(weekData);
            ko.applyBindings(week, $('#content').get(0));
    });

    function WeekViewModel(data){
        var self = this;
        var mapping = {
            'Rows': {
                create: function(options) {
                    return new RowViewModel(options.data, self);
                }
            }
        };
        this.allDays = allDays;
        this.cats = new ko.observableDictionary();
        // more code ...
        ko.mapping.fromJS(data, mapping, this);
    };

    function RowViewModel(row, parent){
        var self = this;
        var mapping = {
            'RowDays': {
                create: function(options) {
                    return new DayModel(options.data, self, parent);
                }
            }
        };
        if(row){
            if(!row.DisplayName) {
                // need data from the root here
                // parent.cats <---
            }
        }
        // more code ...
        ko.mapping.fromJS(row, mapping, this);
    }

    // another submodel ...
});

更新: 小提琴: http://jsfiddle.net/LkqTU/23750/

用html更新小提琴: http://jsfiddle.net/LkqTU/23753/

0 个答案:

没有答案