如何更新ember-infinity infinityModel?

时间:2017-04-23 10:38:43

标签: ember.js infinite-scroll

我正在尝试使用ember-infinity实现搜索。但是,我不理解路由模型和infinityModel之间的相互作用。

我有以下代码:

model() {
  ...
  return this.infinityModel("myModel", {...}, {...})
}

我的搜索操作如下所示:

search(searchCriteria){
  const controller = this.get('controller');
  ...
  _this.infinityModel("myModel", {search:searchCriteria, ...}, {...}).then((myMod)=>{
    ...
    controller.set('model', myModel);
  }); 
}

这样可行,但在调用搜索时,我的查询会被触发两次。

以下内容仅触发查询一次。

search(searchCriteria){
  const _this = this;
  ...
  _this.infinityModel("myModel", {search:searchCriteria, ...}, {...}); 
}

但我的模型没有更新。但是会触发infinityModelUpdated()函数。所以我认为这意味着无限模型已经更新,我认为这是我的模型。

我很确定我错过了一些简单的东西。但任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

只需拨打以下电话:

_this.infinityModel("myModel", {search:searchCriteria, ...}, {...});

无法解决您的问题;那是因为该方法调用只返回检索到的新对象集;这与您从model挂钩返回的原始模型无关。换一种说法;该方法调用进行远程调用,但不会将检索到的对象推送到已从钩子方法返回的模型。如果您改为设置控制器的型号;那么当然新数据会更新到屏幕上;但我不确定为什么要进行第二次远程通话。这可能与屏幕中已存在infinity-loader有关。

我建议使用updateInfinityModel而不是设置控制器的模型。请查看我提供的twiddle。它使用ember-cli-mirage来模拟服务器返回的数据。无论如何,我们的观点是makeInfinityRemoteCall行动。

   this.infinityModel("dummy", { perPage: 12, startingPage: 5}).then((myModel)=>this.updateInfinityModel(myModel));

此处在按钮单击时进行远程调用,并将数据附加到已在model挂钩中构建的模型。我希望这可以帮助你清除事情。请不要犹豫,自己改变一下,或者提出更多问题。

在您发表评论后,我更新了旋转,直接更改了模型。您提到的重复远程呼叫似乎没有出现。您确定正在进行完全重复的远程呼叫吗?您是否可以在模板中使用infinity-loader并且由于在视口中出现而进行下一页的远程调用?