Backbone.js/require.js-覆盖模型函数以将后端作为服务使用

Backbone.js/require.js-覆盖模型函数以将后端作为服务使用,backbone.js,requirejs,backbone.js-collections,backbone-model,Backbone.js,Requirejs,Backbone.js Collections,Backbone Model,大家早上好。我对backbone.js有一点理解上的问题。我有一个来自后端的javascript sdk作为服务,带有一些getter和setter方法来从这个平台获取数据 我已经用require.js加载了这个javascript sdk,工作正常。现在,我需要创建一些使用getter和setter方法的模型,以将这些数据放到我的集合中,并最终放到我的视图中。我没有任何线索…也许有人对我有正确的想法 这是我目前的型号: define(['jquery','underscore','backbo

大家早上好。我对backbone.js有一点理解上的问题。我有一个来自后端的javascript sdk作为服务,带有一些getter和setter方法来从这个平台获取数据

我已经用require.js加载了这个javascript sdk,工作正常。现在,我需要创建一些使用getter和setter方法的模型,以将这些数据放到我的集合中,并最终放到我的视图中。我没有任何线索…也许有人对我有正确的想法

这是我目前的型号:

define(['jquery','underscore','backbone'], function($,_,Backbone) {
    var holidayPerson = Backbone.Model.extend({

        initialize: function() {

            console.log("init model holidayPerson");

            this.on("change", function(data) {
               console.log("change model holidayPerson"+JSON.stringify(data));
            });

        }
    });

    return holidayPerson;
});
实际上,我在视图中创建了模型的一个实例:

define(['jquery','underscore','backbone','text!tpl/dashboard.html','holidayPerson','apio'], function($,_,Backbone,tpl, holidayperson, apio) {

    template = _.template(tpl);
    var usermodel = new holidayperson();

    var dashboardView = Backbone.View.extend({

        id: 'givenname',

        initialize: function() {
            console.log("dashboard view load");
            usermodel.on('change', this.render);

            var user = new apio.User();
            user.setUserName('xxx');
            user.setPassword('xxx');

            apio.Datastore.configureWithCredentials(user);

            apio.employee.getemployees("firstName like \"jon\" and lastName like \"doe\"", {
                onOk: function (objects) {

                    console.log("apio: " + JSON.stringify(objects));

                    usermodel.set({mail: objects[0]['data']['mail'],lastname: objects[0]['data']['lastName'], username: objects[0]['data']['userName'], superior: objects[0]['data']['superior']});

                }
            });
        },

        render: function() {
            console.log("render dashboard view");
            console.log(usermodel.get('mail'));
            console.log(usermodel.get('lastname'));
            this.$el.html(template());
            return this;
        }
    });

    return dashboardView;
});
我认为这不是正确的方法…我可以从这个模型重写getter和setter方法吗?或者url函数?现在有人知道什么是最佳实践吗


非常感谢:-)

首先,确保渲染操作是异步的,就像API调用一样,并且在该操作完成之前不会设置usermodel参数。如果在此之前渲染方法激发,它将渲染空的usermodel,因为数据还不存在


其次,在我看来,模型不需要获取自己的数据。如果您将有多个用户,您可以使用一个集合来容纳这些用户,然后覆盖集合的sync方法来处理从API获取数据的操作,但是如果没有集合,我认为有一个方法来进行数据获取和设置是合乎逻辑的,正如您所做的那样。

谢谢您的回答。我已经改变了我的整个项目结构,它工作得很好。谢谢你,伙计。