javascript - knockout 中级联主从和加载记录。 js

标签 javascript mvvm knockout.js master-detail

我们有以下场景:

One select conected to one observable property Countries, and countryId
Another child select conected to StateProvinces and stateProvinceId observable property 
A compute generating the dependency between the first and second property (Countris and StateProvinces).
We click Load and simulate load a entity from the server, and update the selected values: countryId and stateProvinceId. The real coding uses the mapping plugin.

为了更清楚,请参阅工作 jsfiddle http://jsfiddle.net/sPTHm代码,然后单击“加载”。

当我们在第48行模拟州/省选择的异步ajax请求时,我们开始遇到麻烦。当这个请求是异步时,加载不起作用,只是因为stateProvinceId是在加载StateProvinces之前设置的,并且它将被重置为空。请在此处查看具有 StateProvinces 异步请求的模拟:http://jsfiddle.net/sPTHm/1/ ,然后单击“加载”。

我们已经尝试过:节流、计算可观察配方、deferEvaluation 和大量搜索。在knockoutjs中,理想的方法是什么?

最佳答案

我会尝试使用jQuery deferred concept链接您的ajax请求

        return $.when(self.dataSource.getRtuUserData(rtuId))
            .then(function (rtuUserData)
            {
                self.RtuUserData = ko.mapping.fromJS(rtuUserData);
                return self.dataSource.getRtuStatus(rtuId);
            })
            .then(function (rtuStatus)
            {
                self.RtuStatus = ko.mapping.fromJS(rtuStatus);
                return self.dataSource.getRtuLocation(rtuId);
            })

dateSource 对象上的每个方法都包装一个 ajax 调用:

self.getRtuLinks = function (rtuId)
{
    return $.ajax(
    {
        url: urlRoot + '/rtus/' + rtuId + '/links',
        dataType: 'json',
        cache: false,
        type: 'GET'
    });
}

这样,您就可以同步加载两组数据,这应该可以解决您的问题。

关于javascript - knockout 中级联主从和加载记录。 js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478199/

相关文章:

javascript - 使用 Knockout.js 将 Canvas 绑定(bind)到 UI

javascript - 有没有办法使用 JavaScript 控制 iPod Touch 的键盘方向?

javascript - Bootstrap 主题的模块化和可采纳性

javascript - 在选项卡上的内容可编辑 div 内获取 focus()

c# - 将按钮命令绑定(bind)到非静态属性

mvvm - Xamarin.Forms:是否可以在没有 ViewModel 调用 VIew 的情况下将行动态添加到网格中?

wpf - 通知 DevExpress 数据网格中 View 上的模型属性发生更改

javascript - 组件未在当前 View 中更新

javascript - 参数如何传递给 knockout 函数?

javascript - Vue.js <transition-group> 仅在最后一个元素上应用动画