2013-04-17 12 views
6

Mam problemy z aktualizowaniem obiektów w tytanowym Appcelerator Alloy,Stop tytanu: dostęp do interfejsu użytkownika z różnych kontrolerów?

Po prostu chcę móc dodać wiersz tabeli do tabeli, która znajduje się w innym kontrolerze/widoku, w którym obecnie jestem .... . Mam nadzieję, że będzie lepiej opisać poniżej to: s

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

item_list.xml

<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? 

} 

Czy ktoś wie z dala wokół to?

Dziękuję za przeczytanie :)

Odpowiedz

7

jeden prosty, łatwy rozwiązaniem jest po prostu wywołać szeroki zdarzenie aplikacji po dodaniu produktu do koszyka:

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

następnie słuchać na razie w koszu kontroler gdzieś i dodaj wiersz tabeli:

// 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

Świetnie! bardzo dziękuję Josiah, działa idealnie :) – David

+0

Podoba mi się ta odpowiedź, ale jestem również ciekawy, jak to zrobić w bardziej "modelu-widoku-kontrolera". Załóżmy, że "Koszyk" był modelem lub kolekcją i chcę automatycznej synchronizacji z serwerem. Czy zdarzenia na poziomie aplikacji nadal będą dobrym rozwiązaniem? – Brad

+0

Zdarzenie na poziomie aplikacji może wyzwalać globalne zdarzenie synchronizacji, w którym zmienił się "model", co kończy się informacją o każdym kontrolowanym modelu, a następnie aktualizuje jego widok. Więc niektóre z tych samych pojęć mają zastosowanie. Chociaż "wydarzenie na poziomie aplikacji" prawdopodobnie zostanie zastąpione zdarzeniem kręgosłupa w kolekcji koszyka. –

Powiązane problemy