如何更新 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
并且由于在视口中出现而正在对下一页进行远程调用的情况?
我正在尝试使用 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
并且由于在视口中出现而正在对下一页进行远程调用的情况?