ko.mapping插件 - 等待ajax调用成功

时间:2016-12-06 23:26:01

标签: json ajax google-app-engine knockout.js komapping

我有一个嵌套的json我最终分解为使用ko.mapping

{ users: [ { k: 'key', 
             name: 'Alice'
           }, 
         ],
  roles: [ { k: 'key', 
             name: 'Standard', 
             regex: [ ( 'root', 'me', 'myself'), 
                     ],
           },
         ]
}

...等

我的情况是:

  1. 我的UI需要在vm.users.k上进行数据绑定,但是 json数据(通过$.getJSON$.ajax)不是从服务器加载的喷射;
  2. 如何定义UI,将dom元素绑定到例如vm.users.name,等待ajax请求成功?
  3. 我在看this question但是我可能会忽略这一点。

    我的目标是定义UI ,而不用对初始viewModel进行建模,让它通过对服务器的Ajax调用来填充。需要所有嵌套项和数组才能成为可观察对象。

    我在迭代后的最后一段代码:

    function ViewModel( ) {
        var self = this;
    
        self.users = ko.observableArray();
        self.roles = ko.observableArray();
    // etc. logic
    };
    
    var viewModel = new ViewModel();
    ko.applyBindings( viewModel );
    $.getJSON('/api/call/from/server', function( data ){
        ko.mapping.fromJS( data.users, {}, viewModel.clienti );
        ko.mapping.fromJS( data.roles, {}, viewModel.procedure );
    });
    

    和html:

    <select name="users" data-bind="options: users,
                                    optionsCaption: '',
                                    optionsText: name,
                                    optionsValue: k">
    

    带标题的服务器端谷歌应用引擎:

    self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
    self.response.out.write( json.dumps( object ) )
    

    实际上,我不想使用async: false。 我设法在js ko.mapping的三次通话中打破data.responseJSON次调用,例如将用户映射到vm.users,然后将角色映射到vm.roles等。

0 个答案:

没有答案