7

Extjs4とMVCを使用しています。モデルのフィールドを動的に変更したい...可変数のフィールドを追加するようなもの...何か提案はありますか?

4

1 に答える 1

12

ここにAPImodel.setFields(fieldsArray)で示されている関数を使用できます。このメソッドは、モデル上のすべての既存のフィールドを、引数に含める新しいフィールドに置き換えます。既存のフィールドを上書きしないようにキャプチャする静的な方法はありませんが、を使用して取得するのは簡単です。getFieldsmodel.prototype.fields

最近、ユーザーをロードする前に、動的なアクセス許可設定フィールドを「ユーザー」モデルに添付するためにこれを行いました。次に例を示します。

Ext.define('myApp.controller.Main', {
    extend: 'Ext.app.Controller',

    models: [
        'User',
    ],

    stores: [
        'CurrentUser', // <-- this is not autoLoad: true
        'PermissionRef', // <-- this is autoLoad: true
    ],

    views: ['MainPanel'],

    init: function() {
        var me = this;

        // when the PermissionRef store loads 
        // use the data to update the user model
        me.getPermissionRefStore().on('load', function(store, records) {
            var userModel = me.getUserModel(),
                fields = userModel.prototype.fields.getRange();
                // ^^^ this prototype function gets the original fields 
                // defined in myApp.model.User

            // add the new permission fields to the fields array
            Ext.each(records, function(permission) {
                fields.push({
                    name: permission.get('name'), 
                    type: 'bool'
                });
            });

            // update the user model with ALL the fields
            userModel.setFields(fields);

            // NOW load the current user with the permission data
            // (defined in a Java session attribute for me)
            me.getCurrentUserStore().load();

        });

    }
});
于 2012-06-10T16:29:00.433 に答える