【问题标题】:ExtJS 5.1: Binding record value to component propertyExtJS 5.1:将记录值绑定到组件属性
【发布时间】:2015-05-06 01:31:23
【问题描述】:

假设我有一个 ViewController、ViewModel 和我的 View。在视图中,我有一个获取已加载记录的表单面板。当这条记录加载到表单中时,我想根据记录的status 字段隐藏或显示一个按钮,所以我想用绑定做一些事情。但是,看起来绑定仅限于反转,而不是实际使用表达式。为了更好地理解,请查看this code

Ext.application({
    name : 'Fiddle',

    launch : function() {
        Ext.define('User', {
           extend: 'Ext.data.Model',
           fields: ['name', 'status']    
        });

        Ext.define('UserListController', {
            extend : 'Ext.app.ViewController',
            alias: 'controller.userlist'
        });

        Ext.define('UserListViewModel', {
            extend: 'Ext.app.ViewModel',
            alias: 'viewmodel.userlist'
        });

        Ext.define('UserList', {
            extend: 'Ext.form.Panel',
            controller: 'userlist',
            viewModel: 'userlist',

            tbar: [{
                text: 'Add',
                reference: 'addButton',
                bind: {
                    //hidden: '{status == 2}'
                }
            }, {
                text: 'Delete',
                reference: 'deleteButton',
                bind: {
                    //hidden: '{status == 1}'
                }
            }],
            items: [{
                xtype: 'displayfield',
                name: 'name',
                fieldLabel: 'Name'
            }, {
                xtype: 'displayfield',
                name: 'status',
                fieldLabel: 'Status'
            }]
        });

        var myForm = Ext.create('UserList', {
            width: 400,
            height: 200,
            renderTo: Ext.getBody()
        });

        var record = Ext.create('User', {
            name: 'blah',
            status: 2
        });

        myForm.loadRecord(record);
        if (record.get('status') === 2) {
            myForm.lookupReference('addButton').hide();
        }
    }
});

如您所见,我目前只是在探测记录的值以隐藏 addButton。无论如何我可以通过绑定或其他方法来实现这一点吗?值得一提的是,我还查看了公式,但据我了解,这仅用于更改数据的呈现方式,因此它似乎不是正确的路线。

【问题讨论】:

    标签: extjs mvvm data-binding extjs5


    【解决方案1】:

    如果您的记录是视图模型数据的一部分 - 使用 formulas,例如:

    formulas: {
        hideDeleteButton: function (getter) {
            return getter('record.status') === 2;
        },
        hideAddButton: function (getter) {
            return getter('record.status') === 1;
        }
    }
    

    然后在你看来你可以绑定:

    {
        text: 'Add',
        reference: 'addButton',
        bind: {
            hidden: '{hideAddButton}'
        }
    }, {
        text: 'Delete',
        reference: 'deleteButton',
        bind: {
            hidden: '{hideDeleteButton}'
        }
    }
    

    一个工作示例:https://fiddle.sencha.com/#fiddle/mcg

    【讨论】:

    • 对于未来的 Google 员工,在 v6.5+ 中,您可以根据需要将这些公式表达式嵌入到绑定字符串中。例如,bind: { hidden: '{record.status === 2}' } 将以相同的方式工作 - 分叉的 Fiddle - fiddle.sencha.com/#fiddle/2ka1&view/editor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2014-04-23
    相关资源
    最近更新 更多