-1

所以现在我正在使用 findAll: 'GET api.php/stores-for-you?pid=977&sid=5938&max_fav=3&max_reco=3' 访问数据,这是一种访问我的应用程序的 api 的方法,其中 pid 是页面id 和 sid 是节 id。所以每个页面都有不同的pid和sid。所以到目前为止,我必须为每个我觉得不是一个好选择的 api 调用进行 findall 调用。

我在想我是否可以在这里与 Findall 一起使用 findone。我可以在其中访问特定商店的 api,然后使用 findone 使用参数点击特定 url。

谁能帮我吗。如果问题仍然不清楚,你能不能给我回信,我会试着解释更多。

4

1 回答 1

1

您的 findAll 不应该将页面和部分 ID 硬编码到 GET 字符串中,因为这会使您的 can.Model 特定于该页面。您调用 findAll 的代码应该提供这些。

can.Model 子类表示您从服务器获取的一种数据。findAll 旨在检索该类型的一些对象。您的 GET 字符串似乎想要返回商店。我们可以将您的模型称为 WebStore(我避免使用“Store”,因为该词在 CanJS 中具有不同的含义)。

can.Model.extend("WebStore", {
  findAll : "GET /api.php/stores-for-you?max_fav=3&max_reco=3"
}, {});

在您的 findAll 规范中,我们保留了一些分页键(max_fav 和 max_reco 似乎是结果限制器),因此其他代码无法同时请求 3000 个结果。但是,其他的是针对特定页面的。它们实际上是查询。如果您将它们放入您的 findAll 规范中,您的模型只能检索该页面,从而限制了它的可重用性。

所以现在在其他代码中,可能是控制器原型 init():

var ws_ajax = WebStore.findAll({ pid : 977, sid : 5938 });
ws_ajax.done(function(stores) {
  //Handle the array of 0-3 stores returned from the server. 
});

因此,现在您可以稍后在其他代码中调用其他页面和部分,只需使用不同的 pid 和 sid 值进行相同的调用。您无需尝试破解 findOne 以获得不同的页面。

但是......如果由于某种原因您经常使用该特定页面/部分组合,您可能会考虑在您的 WebStore 模型的静态属性上使用另一个函数,然后它看起来像这样:

can.Model.extend("WebStore", {
  findAll : "GET /api.php/stores-for-you?max_fav=3&max_reco=3",

  findMyPage : function() {
    return this.findAll({ pid : 977, sid : 5938 });
  }
}, {});

注意 findMyPage 在 CanJS 中没有特殊含义。如果这些值发生变化,您只需将 findAll 与常用值包装起来,以节省您过多的键入和维护问题。

留给读者的一个练习是实现“findMyOtherPage”,它会找到……你的另一个页面。

编辑:应要求添加更多细节。

于 2013-12-24T16:59:48.730 回答