2013-03-19 56 views
0

如何將控制器中所做的更改更新到視圖?將控制器中所做的更改更新到視圖

查看

Ext.define('SomeClassName', 
extends: 'Ext.container.Container', 
alias: 'widget.somewidget' 
/* other content here */ 

控制器

requires: ['SomeClassName'], 
init: function(){ 
    var someVar = Ext.widget('somewidget'); 
    Ext.apply(someVar,{html: 'hello'}); 
} 

Eventhough,在上述控制器,我改變可變的html,視圖沒有改變。我在這裏做錯了什麼?

如果這是不可能的,那該怎麼做?

+0

你定義窗口小部件的實例,但你不能將它添加到您的視口或任何其他容器.. – Rob 2013-03-19 08:43:21

+0

@ Rob這正是我的想法(我認爲它會在extjs中調用內置動作)。無論如何要將更改後的變量更新到視圖中? – 2013-03-19 08:44:24

+0

'Ext.Viewport.add(someVar);'? – Rob 2013-03-19 08:45:32

回答

1

首先,如果您只想呈現自定義HTML,則不應使用Ext.container.ContainerExt.Component就足夠了。其次,你可以使用模板:

Ext.define('MyView', { 
    extend: 'Ext.Component', 
    alias: 'widget.myview', 
    tpl: [ 
     '<div>Simon says: {command}</div>' 
    ] 
}); 

Ext.define('MyController', { 
    extend: 'Ext.app.Controller', 
    requires: ['MyView'], 
    init: function() { 
     var cmp = Ext.widget('myview'); 
     cmp.update({ 
      command: 'jump!' 
     }); 
    } 
}); 

注比tpl將不適用首次組件被渲染,你必須調用update了點。有在初始化呈現模板,設置data屬性的默認模板值:

Ext.define('MyView', { 
    extend: 'Ext.Component', 
    alias: 'widget.myview', 
    tpl: [ 
     '<div>Simon says: {command}</div>' 
    ], 
    data: { 
     command: 'do nothing.' 
    } 
}); 
+0

+1此信息。我會試試這個,讓你知道:)。謝謝。 – 2013-03-20 04:02:11

1

那該怎麼辦(doc)?

Ext.widget('somewidget', { html: 'hello' }) 
+0

不,嘗試不工作。這是否應該起作用?我的意思是,這段代碼是否會更新「視圖」? – 2013-03-19 13:44:41

+0

從某種意義上說是的,但更準確的說它是一種初始化。 – leaf 2013-03-19 13:48:25

+0

是的,我認爲這只是創建了一個小部件的實例。但不會更新它作爲「別名」給出的視圖。 – 2013-03-19 13:49:34

相關問題