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

时间:2016-03-17 08:31:58

标签: backbone.js requirejs backbone-collections backbone-model

早上好。我对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功能?现在有人最好的做法是什么?

非常感谢: - )

1 个答案:

答案 0 :(得分:0)

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

其次,在我看来,模型不需要获取自己的数据。如果您将拥有多个用户,您可以使用集合来保存这些用户,然后覆盖集合的sync方法来处理从API获取数据,但如果没有集合,那么拥有一个方法对我来说似乎合乎逻辑这样就完成了数据的提取和设置。正如你所做的那样。