javascript - ExtJS 5 : Set child View Model data from bound value

标签 javascript extjs mvvm extjs5

我有一个类有自己的 View 模型,我在主视图中创建了这个类的两个实例。在主视图中,我想传递我的 2 个类实例的值,但我似乎无法正常工作...我想我只是不理解一些非常简单的概念。

预期结果是 value1 + value2 字段由 value1 和 value2 拼接而成,第一个 myValue 显示 value1,第二个 myValue 显示 value2。这是我的代码和 example :

Ext.application({
  name: 'Fiddle',

  launch: function() {
    Ext.define('MyViewModel', {
      extend: 'Ext.app.ViewModel',
      alias: 'viewmodel.myView',
      formulas: {
        doSomething: function(getter) {
          console.log(getter('value1'), getter('value2'));
          return getter('value1') + getter('value2');
        }
      }
    });

    Ext.define('MyView', {
      extend: 'Ext.panel.Panel',
      xtype: 'myView',
      viewModel: {
        type: 'myView'
      },
      config: {
        myValue: null
      },
      publishes: {
        myValue: true
      },
      items: [
        {
          xtype: 'displayfield',
          fieldLabel: 'myValue',
          bind: {
            value: '{myValue}'
          }
        }
      ]
    });

    Ext.create('Ext.container.Container', {
      renderTo: Ext.getBody(),
      items: [
        {
          xtype: 'displayfield',
          fieldLabel: 'display',
          bind: {
            value: '{doSomething}'
          }
        },
        {
          xtype: 'myView',
          reference: 'view1',
          title: 'View1',
          bind: {
            myValue: '{value1}'
          }
        },
        {
          xtype: 'myView',
          reference: 'view2',
          title: 'View2',
          bind: {
            myValue: '{value2}'
          }
        }
      ],
      viewModel: {
        data: {
          value1: 'Something',
          value2: 'something else'
        }
      }
    })
  }
});

最佳答案

您的第一个 displayField 永远不会“看到”doSomething 公式,因为该公式不是其父级的一部分,因此您需要将公式从 MyViewModel 移动到您的 Ext.container .容器 View 模型。

此外,当您发布自定义值时,它将具有 reference.publishedvalue 格式。这应该可以修复您的面板:

Ext.application({
    name: 'Fiddle',

    launch: function() {
        Ext.define('MyViewModel', {
            extend: 'Ext.app.ViewModel',
            alias: 'viewmodel.myView'
        });

        Ext.define('MyView', {
            extend: 'Ext.panel.Panel',
            xtype: 'myView',
            viewModel: {
                type: 'myView'
            },
            config : {
                myValue : null
            },
            publishes : ['myValue'], 
            items: [{
                xtype: 'displayfield',
                fieldLabel: 'myValue',
                initComponent : function() {
                    var me = this,
                        owner = me.$initParent || me.initOwnerCt;

                    this.setBind({
                        value: '{' + owner.reference + '.myValue}'
                    });
                    this.callParent();
                }
            }]
        });

        Ext.create('Ext.container.Container', {
            renderTo: Ext.getBody(),
            viewModel: {
                data: {
                    value1: 'Something',
                    value2: 'something else'
                },
                formulas: {
                    doSomething: function(getter) {
                        console.log(getter('value1'), getter('value2'));
                        return getter('value1') + getter('value2');
                    }
                }
            },
            items: [{
                xtype: 'displayfield',
                fieldLabel: 'display',
                bind: {
                    value: '{doSomething}'
                }
            },{
                xtype: 'myView',
                reference: 'view1',
                title: 'View1',
                bind: {
                    myValue: '{value1}'
                }
            },{
                xtype: 'myView',
                reference: 'view2',
                title: 'View2',
                bind: {
                    myValue: '{value2}'
                }
            }]
        })
    }
});

关于javascript - ExtJS 5 : Set child View Model data from bound value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32280818/

相关文章:

javascript - 使用 node.js 从文件中返回搜索文本的行

ajax - ExtJS.Grid 上的摘要 + ajax 分页

extjs - gridPanel 中的空消息

mvvm - 使用ReactiveUI连接Viewmodel和模型

c# - WPF Textblock文本不会在组合框所选项目上动态更改

javascript - WebSocket 连接已建立,onopen 从未运行

javascript - 使用 AngularJs 中的表达式动态生成 ng 类变量

javascript - 如何在输入末尾添加文本以及如何删除输入类型数字的默认向上和向下?

javascript - 如何获取有关窗口的父 View 的引用

wpf - 在编译时验证 XAML 中的数据绑定(bind)