Backbone.js:基于用户输入的动态模型/集合url
我是个新手,所以请告诉我正确的方法。以下是我所拥有的:Backbone.js:基于用户输入的动态模型/集合url,backbone.js,Backbone.js,我是个新手,所以请告诉我正确的方法。以下是我所拥有的: 具有3个输入的主干登录视图:serverIP、用户名和密码。我正在进行所有验证,并根据用户之前必须输入的serverIP向后端主机发送jquery ajax()请求 我的后端是js PHP,使用Slim restful框架,检查用户,密码等常用的基本东西 在成功的ajax()调用的回调中,我想设置urlRoot,以便以后使用所有模型和集合,因为我正在使用Slim进行所有数据库交互以及服务器上的这个PHP文件 我尝试在全局app变量上设置它,
var app = {
api_url: '',
views: {},
models: {},
routers: {},
utils: {},
adapters: {}
})
在登录视图的回调中,我设置:
app.api_url = "http://"+serverIP;
并尝试在主干模型url中使用app.api_url,但它显然未定义
可能这不是我正在尝试的正确方法,我把变量范围搞砸了?那么如何从视图中设置model.url?请,任何建议都将不胜感激
谢谢,
匈奴
编辑:好的,我将再次尝试详细说明我的问题:
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 */
}
app.models.Login = Backbone.Model.extend({
urlRoot: function(){
var serverIP = this.get('serverIP');
return "http://"+serverIP+"/api/login";
},
defaults: {
'serverIP': '',
'username': '',
'password': '',
}
});
initialize: function () {
//Search result
this.searchResults = new app.models.EmployeeCollection();
this.searchResults.fetch({data: {name: ''}});
this.searchresultsView = new app.views.EmployeeListView({model: this.searchResults});
}
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?
},
});
主干网中的所有模型都已经有一个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将使用数据对象中的当前值。您没有给出任何相关代码。尝试使用静态url根,然后重构代码,使url根成为动态的。您可以使用模型保存用户凭据和服务器url。我用相关代码编辑了我的问题。请再查一下。谢谢谢谢你的意见!我采用您在主干网中进行loginModel的方式,但我仍然不知道如何从模型/集合访问serverIP。请检查我的编辑上面。谢谢