我完全是Backbone的新手,所以请指点正确的方法来做到这一点。这里是我有:Backbone.js:基于用户输入的动态模型/收集网址
- 一个骨干登录视图有3个输入:serverIP,用户名,密码。我正在做所有验证,并根据用户必须先输入的serverIP将jquery ajax()请求发送到我的后端主机。
- 我的后端是使用Slim restful框架的js PHP,像通常的基本东西一样检查用户,密码。
- 在成功调用ajax()的回调函数中,我想为所有模型和集合的后续使用设置urlRoot,因为我使用Slim来处理所有数据库交互以及位于服务器上的此PHP文件。
我试图将其设置在app.js这样的全球应用变量:
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,从用户输入获取登录表单上的服务器IP发送到服务器处理
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? }, });
你没有给出任何相关的代码。试着用一个静态的url根,然后重构你的代码,这样url根就变成动态的。您可以使用模型来保存用户凭据和服务器URL。 – mpm
我使用相关代码编辑了我的问题。请再检查一次。谢谢! – user2589700