Canjs找到并找到了?

时间:2013-12-23 19:42:16

标签: canjs canjs-model

现在我正在使用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这里使用findone。我可以在哪里访问api到特定的商店,然后使用findone用参数点击特定的URL。

任何人都可以帮助我。如果问题仍然不明确,你可以回信给我,我会试着解释一下。

1 个答案:

答案 0 :(得分: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”,它会找到......你的另一页。

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