2013-04-17 9 views
6

私はチタン製のAppcelerator合金のオブジェクトを更新するのに問題があるようです。チタン合金:異なるコントローラからUIにアクセスしていますか?

私は基本的に、現在の別のコントローラ/ビューにあるテーブルにテーブル行を追加できます。 。うまくいけば、以下の優れた本を説明します。■

basket.xml

<Alloy> 
    <Window id="basketWindow" class="container"> 
     <TableView id="basketTable" /> 
     <Button id="addItemButton" onClick="addItem">Add Item</Button> 
    </Window> 
</Alloy> 

basket.js

function addItem() 
{ 
    var itemList = Alloy.createController('item_list'); 

    itemList.getView().open(); 
} 

<Alloy> 
    <Window id="itemListWindow" class="container"> 
     <TableView id="itemListTable"> 
      <TableViewRow id="item1" className="item" onClick="addItemToBasket"> 
       Test Item 
      </TableViewRow> 
     </TableView> 
    </Window> 
</Alloy> 

item_list.js

function addItemToBasket() 
{ 
    var row = Ti.UI.createTableViewRow({title: 'Test Item'}); 

    // Here i would ideally want to put something like $.basketTable.append(row); 
    // But nothing happens, im guessing it cant find $.basketTable as its in a different controller? 

} 

item_list.xml誰もが離れて、​​この周りに知っていますか?

答えて

7

一つの簡単な、簡単な解決策は、あなたがバスケットに項目を追加するときだけでアプリ全体のイベントをトリガすることです:)読み取るための

ありがとう:

function addItemToBasket() { 
    Ti.App.fireEvent("app:itemAddedToBasket", { 
     title : "Test Item", 
     otherAttribute : "Value" 
    }); 
} 

は、次にバスケットにイベントをリッスンコントローラをどこかに追加してテーブル行を追加します。

// inside basket.js 
Ti.App.addEventListener("app:itemAddedToBasket", function(e) { 
    // object 'e' has all the row information we need to create the row 
    var row = Ti.UI.createTableViewRow({ 
     title: e.title, 
     otherAttribute: e.otherAttribute 
    }); 
    // Now append it to the table 
    $.basketTable.append(row); 
}); 
+0

おかげさまで、ジョシアは完璧に働きます:) – David

+0

私はこの答えが好きですが、私はまたこれを行うためのより "モデルビューコントローラ"の方法について興味があります。 「Basket」がモデルまたはコレクションであり、サーバーとの自動同期が必要であるとします。アプリレベルのイベントはまだ良い解決策ですか? – Brad

+0

アプリレベルのイベントが「モデル」が変更されたグローバル同期イベントをトリガーする可能性があります。これはモデルが変更されたことを各コントローラに通知し、そのビューを更新します。したがって、同じ概念のいくつかが適用されます。 「アプリレベルイベント」はおそらくバスケットコレクションのバックボーンイベントに置き換えられます。 –

関連する問題