2015-02-12 63 views
0

我想在extjs5中动态地更改一个绑定,我无法完全弄清楚这是甚至可能的,或者如果我只是完全用错误的方式去做。我会尽力解释我正在尝试做什么。我曾经这样定义一个textarea:是否有可能动态更新extjs5中的绑定?

id: 'final-view', 
xtype: 'textareafield', 
editable: false, 
bind:{ 
    value: '{r.options}' 
} 

在我的ViewModel我有:

data: { 
    r:{ 
    options: {} 
    } 
} 

该页面奠定出像:

textarea 
"Add Option" button 
option 1 
... 
option n 

我有一个按钮 “添加选项”,这用一组选项添加一个组合框到页面上,然后他们可以从下拉菜单中选择一些内容并在组合框中输入额外的内容。当创建组合我有递增的变量,这个数字是用于创建唯一ID:

var new_opt = 'r.options.opt_' + cnt; 

这用于一个元素添加到r.options对象如下:

viewModel.set(new_opt, ''); 

创建的每个组合具有类似于所定义的绑定:

bind: { 
    value: '{r.options.opt_' + this.id.substr(14) + '}' 
} 

其中i∈1“ this.id.substr(14)”是我的CNT可变因此,对于第一个选项的值绑定是“{r.options。 opt_1}”。 最终目标是将每个组合框的所有内容连接并绑定到textarea。我想要做的是在添加选项时动态更新textareafield的绑定,以便在任何组合框输入时更新最终视图。因此,例如,如果有2个选项在视图模型中的数据对象将是这样的:

id: 'final-view', 
xtype: 'textareafield', 
editable: false, 
bind:{ 
    value: '{r.options.opt_1} {r.options.opt_2}' 
} 

和:

data: { 
    r:{ 
    options: {opt_1: 'value1', opt_2: 'value2'} 
    } 
} 
这个我想如下改变我的绑定是

所以textarea你会看到内容“value1 value2”。我想避免的是每次通过循环遍历“r.options”对象中的所有元素并更改值,从头开始重新填充textarea,所以我想了解是否有方法更新value字段的绑定会更有效率。任何帮助或指导将不胜感激,我仍然是相当新的MVVM范例。

回答

3

您很可能在寻找setBind()方法。

只要我2美分:整个事情看起来过于复杂,即使你找到了如何使它工作的方法,考虑简化它。

+0

这正是我所需要的,我得到了这个伟大的工作!非常感谢。我现在也可以简化它,只是为了确保这个概念在投入太多时间之前能够工作。 – johnjg12 2015-02-13 00:38:27

1

您不需要明确设置绑定。

viewModel.setData('newValue')将完成工作。

另外,你是否在任何地方存储该数据?如果是这样,也许你需要将它绑定到store.model字段值,那么共享该模型实例的任何其他视图将在数据更改时自动更新。如果是这种情况,您可能会将textarea绑定到“{model.field}”,其余部分会自动发生。

我希望这会有所帮助。

相关问题