2012-06-07 30 views
7

Tôi sử dụng Extjs4 và MVC. Tôi muốn thay đổi các trường của Mô hình của tôi một cách năng động ... Điều gì đó giống như thêm một số trường biến ... Bất kỳ gợi ý nào?Extjs4 Làm thế nào để thay đổi một Mô hình động?

+1

thể trùng lặp của [động mẫu với ExtJS 4] (http://stackoverflow.com/questions/5751289/dynamic-model-with-extjs-4) –

+0

biết chính xác là bạn cố gắng để làm gì? Bạn có thể chi tiết hơn một chút không? Và bạn đang sử dụng phiên bản ExtJ nào? – sha

+1

Extjs4, ví dụ tôi có một mô hình với 3 lĩnh vực ... Tôi muốn mở rộng nó với sáu lĩnh vực khác ... –

Trả lời

12

Bạn có thể sử dụng chức năng model.setFields(fieldsArray), được hiển thị here trong API. Phương thức này thay thế tất cả các trường hiện có trên mô hình với bất kỳ trường mới nào bạn đưa vào đối số. Không có phương thức tĩnh getFields để nắm bắt các trường hiện có để không ghi đè chúng nhưng nó đủ dễ dàng để có được chúng bằng cách sử dụng model.prototype.fields.

Tôi đã thực hiện việc này gần đây để đính kèm các trường cài đặt quyền động vào mô hình "Người dùng" trước khi tôi tải người dùng. Dưới đây là một ví dụ:

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(); 

     }); 

    } 
}); 
+0

Tôi chỉ nhận thấy rằng đây là bản sao của [this one] (http://stackoverflow.com/questions/5751289/dynamic-model-with-extjs-4) sau khi tôi trả lời nó. Tôi đưa ra câu trả lời chính xác ở đó ... – Geronimo

Các vấn đề liên quan