Backbone.js / require.js - 覆盖模型函数以将后端作为服务使用
Backbone.js / require.js - Override model function to work with backend as a service
大家早上好。我对 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 调用将是异步的,并且在该操作完成之前不会设置用户模型参数。如果您在此之前触发渲染方法,它将渲染空的用户模型,因为数据还不存在。
其次,在我看来,模型不需要获取自己的数据。如果你有多个用户,你可以使用一个集合来保存这些用户,然后覆盖集合的同步方法来处理从 API 获取数据,但如果没有集合,这对我来说似乎是合乎逻辑的有一个方法可以像你所做的那样在之后进行数据获取和设置。
大家早上好。我对 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 调用将是异步的,并且在该操作完成之前不会设置用户模型参数。如果您在此之前触发渲染方法,它将渲染空的用户模型,因为数据还不存在。
其次,在我看来,模型不需要获取自己的数据。如果你有多个用户,你可以使用一个集合来保存这些用户,然后覆盖集合的同步方法来处理从 API 获取数据,但如果没有集合,这对我来说似乎是合乎逻辑的有一个方法可以像你所做的那样在之后进行数据获取和设置。