Ember.js EmberJS:如何动态地重新加载模型和模板(在一个操作之后,按下ex';按钮';)
EmberJS版本1.11.3 我有一个按钮,当按下时,它会向我的服务器发送一个Ajax查询并返回一些数据。我希望每次都用新数据刷新此按钮下的视图 以下是简化的把手模板:Ember.js EmberJS:如何动态地重新加载模型和模板(在一个操作之后,按下ex';按钮';),ember.js,Ember.js,EmberJS版本1.11.3 我有一个按钮,当按下时,它会向我的服务器发送一个Ajax查询并返回一些数据。我希望每次都用新数据刷新此按钮下的视图 以下是简化的把手模板: <script type="text/x-handlebars" data-template-name='query'> <form class="form-vertical" {{action "sendQuery" model}}> <div class="contro
<script type="text/x-handlebars" data-template-name='query'>
<form class="form-vertical" {{action "sendQuery" model}}>
<div class="control-group">
{{input value=this.totoQuery type="text" placeholder="Enter an SQL query...."}}
</div>
<button type="submit" class="btn">Send ! </button>
</form>
</script>
Ajax调用工作正常,路由中也定义了模型(我使用虚拟模型进行了测试)。但是,当我尝试使用以下内容更新模型时:
model=data.entries; //The template does not update with it!!! The template still displays the data from the dummy model.
我不能用这个.set('model',data)修改它,因为“未定义的函数!!这个.set”。。
我的虚拟模型:
App.QueryRoute = Ember.Route.extend({
model: function() {
return [{
'title': 'A book title like Harry Potter of Fifty Sha... nvm.. '
}];
}
});
非常感谢您的任何建议
PS:我在这方面花了太多时间:(您可以通过以下方式获得控制器内部的模型操作:
sendQuery: function() {
var self = this,
totoQuery = this.get('totoQuery');
var promise = asyncAjax(queryservice + '?query=' + totoQuery);
promise.done(function(data) {
$.each(data.entries, function (index, entry){
self.get('model').pushObject(entry);
});
})
}
您不需要将模型作为参数传递到操作中。您可以执行以下操作:
<form class="form-vertical" {{action "sendQuery"}}>
控制器自动继承模型属性。一件事是,使用
this获取模型属性。在Ember中,totoQuery
将被弃用。相反,使用模型。ToToToQuery
如果您太费劲了,您也可以从控制器而不是从路线直接从模型渲染某些内容,这样做您可以从控制器中更新变量,并且很容易更改
App.QueryController = Ember.Controller.extend({
queryResponse: [],
totoQuery: '',
actions: {
sendQuery: function(model, route) {
var self = this;
var promise = asyncAjax(queryservice + '?query=' + this.totoQuery);
promise.success(function(data) {
//model=data.entries;
self.set('queryResponse', data.entries);
})
}
})
在模板中,您可以直接渲染它
<ul>
{{#each item in controller.queryResponse}}
<li>item.name</li>
{{/each}}
</ul>
{{{#controller.queryResponse}中的每个项
- item.name
{{/每个}}
2件事我从你的回复中意识到:1.似乎this.get('model')
在Ajax承诺的“success”函数中不起作用。我只能推测这是因为该函数在控制器中嵌入得太深了。('model'依赖性似乎并没有完全消失)。或者,我们得到:>未捕获类型错误:this.get不是函数2。mod=data。条目
不会刷新/重新加载把手模板。我做错了什么吗?@LéoL请查看我编辑的答案。第一件事是成功
(不推荐使用)不能在ajax函数之外作为回调函数使用。您必须使用done
。第二件事,因为您的模型返回一个数组,所以您必须使用循环将新对象推送到它。它表示self.set(…)
不是一个函数。我认为控制器中的依赖性没有那么深。这很有效!!我会给你投票,但我的分数不足以做到这一点…当我收集到足够多的假互联网分数时,我会回来的:D。。。
<ul>
{{#each item in controller.queryResponse}}
<li>item.name</li>
{{/each}}
</ul>