我是Backbone的新手,所以请指出我正确的做法。这就是我所拥有的:
我尝试在app.js中将其设置为全局app变量:
var app = {
api_url: '',
views: {},
models: {},
routers: {},
utils: {},
adapters: {}
};
在登录视图的回调中,我设置了:
app.api_url = "http://"+serverIP;
尝试在骨干模型网址中使用app.api_url,但显然未定义。
可能这不是我正在尝试的正确方法,我搞砸了变量范围?然后我如何从视图中设置model.url?请提出任何建议。
谢谢, Hungnd
编辑:好的,我会再次尝试解决我的问题:
以下是 LoginView.js 中的登录功能,基本上它需要用户输入并发送到我的模型与服务器进行交互,如果成功导航到主视图:
var user = new app.models.Login();
var userDetails = {
serverIP: $('#serverIP').val(),
username: $('#username').val(),
password: $('#password').val()
};
user.save(userDetails, {
success: function(data) {
/* update the view now */
if(data.error) { // If there is an error, show the error messages
}
else { // If not, send them back to the home page
app.router = new app.routers.AppRouter();
app.router.navigate('home',true);
}
},
error: function() {
/* handle the error code here */
}
这是我的 LoginModel.js ,从登录表单上的用户输入获取serverIP并发送到服务器进行处理
app.models.Login = Backbone.Model.extend({
urlRoot: function(){
var serverIP = this.get('serverIP');
return "http://"+serverIP+"/api/login";
},
defaults: {
'serverIP': '',
'username': '',
'password': '',
}
});
现在,成功登录后,导航到 HomeView.js ,初始化调用EmployeeCollection,到目前为止一直很好
initialize: function () {
//Search result
this.searchResults = new app.models.EmployeeCollection();
this.searchResults.fetch({data: {name: ''}});
this.searchresultsView = new app.views.EmployeeListView({model: this.searchResults});
}
这是我的 EmployeeModel.js ,我遇到了问题,我不知道如何访问serverIP变量。
app.models.Employee = Backbone.Model.extend({
urlRoot:"api/employees",
//urlRoot: app.api_url+"/api/employees",
initialize:function () {
this.reports = new app.models.EmployeeCollection();
this.reports.url = app.api_url+'/api/employees/' + this.id + '/reports';
}
});
app.models.EmployeeCollection = Backbone.Collection.extend({
model: app.models.Employee,
//url: "api/employees",
url: function() {
//How to get serverIP?
},
});
答案 0 :(得分:1)
主干中的所有模型都有一个url属性,用于获取数据。在您的情况下,您可以将其定义为动态生成URL的函数。
以下是一个例子:
//we are inside the definition of the loginModel
data: {
serverIP : null,
username : null,
password : null
},
url: function() {
var url = "rootUrl",
data = this.get("data");
return function() {
return url + '?' + $.param(data);
};
}
然后将url定义为闭包,并在javascript中引用对象,生成的url将使用数据对象中的当前值。