【发布时间】:2012-11-21 18:08:47
【问题描述】:
我有 ember (1.0.0-pre2) 视图,它有一个表单和一个按钮。表单绑定到允许填充表单输入和收集输入值的视图类。 现在单击按钮,我想从表单值创建一个 dto 对象并将其发送到控制器。 按钮html如下
<input type="submit" value="Add" data-icon="plus" {{action addReport view.report target="controller"}} />
查看代码是
ContentView: baseView.extend({
task: null, //initialized when form is filled in
report: function () {
var task = this.get('task');
if (task == null)
return null;
return reportModel.create({
taskId: task.id
});
}.property()
})
控制器代码是
DayController: ember.Controller.extend({
addReport: function (evt) {
console.log(evt.context);
}
})
当我运行代码时,事件上下文为空。当我查看调试器时,report 计算属性只执行一次,即呈现视图时。单击按钮时,计算的属性不会被评估 - 控制器方法会立即被调用。
非常相似的构造在同一个应用程序中可以正常工作,但对于不同的视图,方法是在路由器中,而不是在控制器中:
<a href="#" {{action changeDate view.prevDate href=true}}>Prev</a>
查看:
HeaderView: baseView.extend({
prevDate: function () {
return addDays(this.get('_dataSource').date, -1);
}.property()
})
按钮有什么问题,为什么它不起作用而不是链接?
【问题讨论】:
-
在我尝试回答之前,我只是想验证一下:您在报告属性函数中有
var task = this.get('task')——这意味着task是您代码中ContentView上的一个属性,但只是省略了从例子中? -
是的,
task是 ContentView 的属性。我更新了问题中的代码。