如何更新 ember-infinity infinityModel?

How to update an ember-infinity infinityModel?

我正在尝试使用 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() 函数被触发。所以我假设这意味着 infiniteModel 已更新,我假设这是我的模型。

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

只需调用以下内容:

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

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

我的建议是使用提供的 updateInfinityModel 而不是设置控制器的模型。请查看 twiddle I have provided. It uses ember-cli-mirage 以模拟服务器返回的数据。不管怎样,我们的重点是 makeInfinityRemoteCall 动作。

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

这里是在单击按钮时进行远程调用,并将数据附加到已在 model 挂钩中构建的模型中。我希望这可以帮助您清除问题。请不要犹豫,自己修改游戏或提出更多问题。

收到你的评论后,我已经更新了twiddle 直接更改模型。您提到的重复远程调用似乎没有出现。您确定正在进行完全重复的远程调用吗?是否只是您在模板中使用 infinity-loader 并且由于在视口中出现而正在对下一页进行远程调用的情况?