我正在尝试使用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()函数。所以我认为这意味着无限模型已经更新,我认为这是我的模型。
我很确定我错过了一些简单的东西。但任何帮助将不胜感激。
答案 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
并且由于在视口中出现而进行下一页的远程调用?