2012-09-27 20 views
7

Ricevo oggetti JSON da un websocket con update/create/delete flags. Sulla base di queste informazioni, aggiornamento, creazione o eliminazione di elementi HTML e binding callback. Questo può influenzare più elementi HTML.Come separare JavaScript codice View/Logic correttamente

Il mio approccio è stato quello di mettere tutto in oggetti specifici che gestiscono la generazione di HTML tramite jQuery es .:

$.("<table>").addChild($("<tr>")).addClass('test') 

e gli ascoltatori di eventi legano. Ma con l'aggiunta di un numero sempre maggiore di codice è diventato molto complicato e ora sto cercando un modo corretto per separare il codice.

Ci sono idee su come farlo correttamente? Frameworks? Forse jQuery Templates (che mi lascia ancora all'oscuro su come aggiungere callbacks in modo pulito)?

+0

hai provato a creare eventi personalizzati? – udidu

+0

Non ho mai sentito parlare di loro, Ive ha appena cercato e non penso che sarebbe di aiuto nel separare la vista/codice logico. Se hai un'idea su come usarli, ti preghiamo di spiegare :) – user1703761

+0

Possibile duplicato: http://stackoverflow.com/questions/7495680/can-anyone-suggest-design-pattern-to-separate-business-logic-and -presentation-lo –

risposta

0

per eseguire il rendering HTML è possibile utilizzare Handlerbars.js è molto maturo e hanno un sacco di documentazione

per l'evento vincolante vi consiglio di usare jQuery delegate sul l'oggetto padre che non aveva soppresso con l'aggiornamento ajax. In questo modo si solo bisogno di riassegnare gli eventi a ogni richiesta

4

Cercare il quadro MVVM. Questo è esattamente ciò di cui hai bisogno poiché il tuo JavaScript sta diventando sempre più complesso. Separa le tue esigenze di preoccupazione tra il tuo codice di presentazione (html) e Presentation Logic (JavaSript)

Knockout.js è davvero una buona libreria per iniziare, ti consiglio di passare attraverso le esercitazioni per iniziare.

esempio veloce:

HelloWorld.html

<div data-bind="value: helloWorldVariable"></div> 
<input type="button" data-bind="click: helloWorld" /> 

page.js:

var ViewModel = { 
    helloWorldVariable: ko.observable('test'), 
    helloWorld: function() { 
     this.helloWorldVariable('clicked!'); 
    } 
} 

// Bind viewmodel 

Quando il pulsante viene premuto, il div visualizzerà automaticamente "cliccato" . Questo, ovviamente, può essere utilizzato quando si recuperano informazioni dal server tramite richieste AJAX e non è necessario fare affidamento su ID di controllo/classi CSS. Possono cambiare in qualsiasi momento e il tuo codice è ancora pertinente.

0

Partenza Backbone.js. È un'impostazione MVC-ish molto popolare e flessibile per le app del browser JS. Il codice è ospitato su github.

0

Knockout JS potrebbe essere la pena dare un'occhiata, separa il modello di dati dal modello di vista e si prende cura delle dipendenze tra loro.

Problemi correlati