我有这个Backbone.js模型和视图代码,我试图从文本字段中获取值,并根据此值从REST api获取数据。我在修改基本URL时遇到问题。
带有基本网址的模型:
var TodoItem = Backbone.Model.extend({
urlRoot : 'http://localhost/Codeigniter/index.php/testcontroller',
initialize: function(){
this.set('id', 1);
},
defaults: {
name: '',
age: ''
}
});
var todoitem = new TodoItem({name: "name"});
我正在设置新网址的功能:
getUrl: function(celebname){
var urlstr = "http://localhost/Codeigniter/index.php/testcontroller/getdatabasedata?searchvalue="+celebname;
return urlstr;
},
从REST api获取数据的函数。
getdata: function (event) {
var celebname = $('#celebname').val();
this.model.set({name: celebname});
this.model.save({}, { urlRoot: this.getUrl(celebname)});
this.model.fetch();
},
目前我收到此错误:
获取http://localhost/Codeigniter/index.php/testcontroller/1
我无法使用getURL函数更改基本URL以从输入字段中搜索值。而是使用基本URL和结尾处的id。 如果我没有在模型的初始化函数中设置ID,那么我会收到此错误:
POST http://localhost/Codeigniter/index.php/testcontroller
/ getdatabasedata?searchvalue = Rome
从我在网上看到的,这是因为没有为模型分配id。 如何使用GET方法获取输入字段值,构建URL和获取数据? 谢谢
答案 0 :(得分:0)
Backbone在真正的RESTful API中运行得非常好。这里的部分问题是你拥有的API并没有真正映射到Backbone模型,即它不完全是RESTful。因此,您将不得不诉诸“黑客”让客户端和服务器相处融洽。动态修改模型的路由就是这种黑客行为的一个例子。
如果您可以详细说明您的用例,可以帮助您获得更好的答案。
据我所知,你并非真的试图坚持TodoItem
。相反,你试图用一些基础数据预先填充它。如果这是真的,那么你真的不应该做save
- 你应该做fetch
。
getdata: function (event) {
var celebname = $('#celebname').val();
var id = this.model.id;
this.model.id = 'getdatabasedata';
this.model.fetch({data: {searchvalue: celebname}});
this.model.id = id;
}
传递data
选项将告诉jQuery将其用作查询字符串参数。
同样,这是非常hacky我不会推荐它,但它会完成你想要做的事情。