Backbone.js动态URL问题

时间:2015-12-25 19:35:31

标签: javascript php codeigniter url backbone.js

我有这个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和获取数据? 谢谢

1 个答案:

答案 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我不会推荐它,但它会完成你想要做的事情。