2014-02-19 98 views
1

該框架已設置,以便您可以同時加載多個視圖(並可能與之相關聯的控制器),但是我無法編寫正確的控制器代碼來「知道」所有內容。

的鈦文檔描述了「$」使用,像這樣:

具有在視圖中的id屬性的所有UI元素被自動定義並可以作爲由控制器中的特殊變量$前綴的屬性。 $是對控制器的引用。 ...要訪問外部控制器和視圖,分別使用Alloy.createController和Controller.getView方法。

鈦文檔還說,通常視圖和控制器成對工作。

假設我有一個視圖定義包含一個'後退'按鈕,另一個視圖是一個刷新按鈕。重點是這些視圖包含相關的控制器,無論我處於什麼上下文環境都需要工作。後退按鈕需要始終關閉頂層窗口,刷新按鈕需要重新加載主視圖的數據,無論主視圖「我正在看。

因此,我創建一個主視圖,並將這兩個視圖加載到它。現在我有3個視圖控制器在一個上下文中一起工作。邏輯要求後退按鈕知道如何關閉其父母,或者甚至根據「返回」的位置做更多的事情;刷新按鈕顯然需要知道如何訪問父視圖的數據。我如何使用'$'來編碼我是否總是侷限於單個控制器?對我來說,當所有3個實體在同一個地方工作時,我加載「外部」控制器或視圖是沒有意義的。

+1

$只是編碼的好捷徑。你的問題似乎更復雜一點。你可以發佈示例代碼,顯示你正在試圖用你的控制器和視圖做什麼? – daniula

+0

感謝daniula。這只是一個普遍的問題,不涉及我的代碼。我想我只是問一個有經驗的合金開​​發人員會採取什麼樣的方法。如果他們不會使用$,那對我來說就夠了。 – Brad

+1

我在每個控制器中使用$。它允許通過他們的id名稱訪問你的視圖,並導出可由另一個控制器調用的公共可用方法。 – daniula

回答

1

下面是一個示例,介紹如何在不同的Alloy控制器之間使用$。

index.js:

$.open.addEventListener('click', function() { 
    var view = Alloy.createController(view, { title: 'First Title' }); 
    view.setTitle('Second Title'); 
}); 

$.index.open(); 

view.js:

var args = arguments[0] || {}; 

$.setTitle = function(title) { 
    $.title.text = title; 
}; 

if (args.title) { 
    $.setTitle(args.title); 
} 

當然我認爲INDEX.XML和view.xml用存在,與此類似:

指數.xml:

<Alloy> 
    <Window> 
     <Button id="open" title="Open New Window" /> 
    </Window> 
</Alloy> 

查看。 xml:

<Alloy> 
    <Window> 
     <Label id="title">Empty Title</Label> 
    </Window> 
</Alloy>