动态设置Ember视图的上下文

时间:2013-09-13 17:31:41

标签: javascript ember.js ember-data

是否可以更改Ember视图的上下文,特别是关于valueBinding?我有一个文本输入矩阵,其中行代表表示星期几的类别和列。我不想保存空值或0值,但是如果用户在该输入中输入小时数,则每个输入都有一些特定于其的其他数据需要保存。因此,在生成表单时,我创建了一个对象数组,每个对象只是一个javascript哈希(如果该字段不存在现有条目)或者是一个余烬数据记录(如果一个条目已存在)并使用其中的每一个对象作为视图的上下文。

因此,我们的想法是,如果用户在具有现有值的字段中输入零或空字符串,则删除该记录,并将视图的上下文替换为仍包含其他相关部分的简单哈希如果用户返回并再次设置该值,则该字段的信息。相反,将输入添加到先前为空的字段将使用附加散列中的值和输入值创建新的余烬数据记录。

我已经删除了现有的记录,但是文本输入的valueBinding仍然绑定到要删除的记录。我想立即将字段的上下文更改为占位符哈希。如果我提交事务并返回到该屏幕,则记录已被删除,上下文现在是一个新生成的占位符,但我想更改TextField视图的上下文(我已扩展)值更改为零/ null。我尝试过使用this.set('context')this.set('valueBinding'),但都没有用。到目前为止,这是我的观点代码。任何人都可以帮助我,或建议更好的选择吗?

App.HourInputView = Ember.TextField.extend({
  type: 'number',
  init: function(){
    this._super() ;
    var context = this.get('context') ;
    var ph = moment(this.get('context.cal_date')).format("dd") ;
    this.set('placeholder',ph) ;
  },

  change: function(){
    var val = this.get('value') ;
    if (this.contextIsRecord() && (val===0 || val==='0' || val==='')) {
      var record = this.get('context') ;
      var new_ctx = this.get('context').getProperties('user','site','supervisor','category','cal_date') ;
      new_ctx.total = null;
      this.set('context',new_ctx) ;
      this.set('valueBinding',"new_ctx.total") ;
      record.deleteRecord() ;
    }
  },


  //--

  contextIsRecord: function() {
    var ctx = this.get('context') ;
    return (typeof ctx.deleteRecord === 'function') ;
  }
}) ;

1 个答案:

答案 0 :(得分:0)

圣牛,我是不是错了。走开了,吃了一些午餐,回来后想出了一个更好的解决方案。我没有使用实际的Record对象和虚拟哈希的组合,而是为每个输入创建一个记录对象,并观察每个输入的变化。任何更改都会添加到自定义事务中。当用户单击保存按钮时,我提交自定义事务并回滚默认事务以删除所有不相关的Record对象。