backbone.js:执行列表获取时如何发送约束

backbone.js:执行列表获取时如何发送约束,backbone.js,Backbone.js,我正在尝试在前端使用backbone.js和backbone-relational.js构建一个应用程序,在后端使用由Pyramid/Cornice/sqlalchemy运行的RESTful api 在这个阶段,我有两个模型,客户(基本上是企业)和资产(企业拥有的资产)。。。最终会有许多其他模型,用于用户、站点等。两种模型的简化示例: Client: id name Asset: id make model purchase_cost client_id 现在,当

我正在尝试在前端使用backbone.js和backbone-relational.js构建一个应用程序,在后端使用由Pyramid/Cornice/sqlalchemy运行的RESTful api

在这个阶段,我有两个模型,客户(基本上是企业)和资产(企业拥有的资产)。。。最终会有许多其他模型,用于用户、站点等。两种模型的简化示例:

Client:
  id
  name

Asset:
  id
  make
  model
  purchase_cost
  client_id
现在,当从服务器获取这些模型的数据时,我的backbone.js代码目前运行良好;我有两个列表视图,一个显示所有客户端的列表,另一个显示所有资产的列表

我现在的问题是,当我在客户列表中单击其中一个客户时,我希望它只显示属于该特定客户的资产列表。服务器端部分没有问题,它只是一个过滤器(),我的问题是,当backbone.js请求资产列表时,如何让它发送这样的约束

(虽然我在下面的代码中使用了RelationalModel,但我仍在学习它,还没有真正弄清楚如何使用它)

我不认为我需要在这里展示任何观点

在我的路由器中,我目前有一个listClients函数和一个listAssets(见下文)函数,我想我需要添加一个ListAssetForClient(clientid)函数,但我不确定如何使用clientid,以便backbone.js在获取资产列表时将其作为约束发送到服务器。我假设需要做的任何事情都将在AssetCollection模型中进行,但我在Collection API中看不到任何合适的东西。有一些方法可以对已经获取的列表进行过滤,但在我只需要资产的一个子集,并且可以让服务器进行过滤的情况下,获取整个资产列表(最终可能有数千个资产)似乎效率低下

listAssets: function() {
    $('#header').html(new AssetHeaderView().render().el);
    this.assetList = new AssetCollection();
    var self = this;
    this.assetList.fetch({
        success:function () {
            self.assetListView = new AssetListView({model:self.assetList});
            $('#sidebar').html(self.assetListView.render().el);
            if (self.requestedId) self.assetDetails(self.requestedId);
        }
    });
},

好的,我已经弄明白了。fetch()方法有一个可选的“data”参数,可以传递约束。因此,我的新功能是:

listAssetsforClient: function(id) {
    $('#header').html(new AssetHeaderView().render().el);
    this.assetList = new AssetCollection();
    var self = this;
    this.assetList.fetch({
        data: { clientid: id },
        success:function () {
            self.assetListView = new AssetListView({model:self.assetList});
            $('#sidebar').html(self.assetListView.render().el);
            if (self.requestedId) self.assetDetails(self.requestedId);
        }
    });
},

当然,这只适用于获取数据,现在我必须弄清楚如何在保存新资产对象时获取clientid…我认为应该使用而不是$('#header').html(new AssetHeaderView().render().el);您应该使用$('#header').append(new AssetHeaderView().render().el);但也许我错了。
listAssetsforClient: function(id) {
    $('#header').html(new AssetHeaderView().render().el);
    this.assetList = new AssetCollection();
    var self = this;
    this.assetList.fetch({
        data: { clientid: id },
        success:function () {
            self.assetListView = new AssetListView({model:self.assetList});
            $('#sidebar').html(self.assetListView.render().el);
            if (self.requestedId) self.assetDetails(self.requestedId);
        }
    });
},