2011-10-03 8 views

risposta

12

come tutto il resto nello sviluppo del software, "dipende".

se si utilizzano gli input di modulo nelle viste e si ha solo bisogno di ottenere i dati da tali ingressi nei modelli, impostare direttamente i dati. Lo si può fare qualsiasi numero di modi, tra cui "Change" eventi dai campi di input, come questo:

MyView = Backbone.View.extend({ 
    events: { 
    "change #name", "setName" 
    }, 

    setName: function(e){ 
    var val = $(e.currentTarget).val(); 
    this.model.set({name: val}); 
    } 
}); 

D'altra parte, se si sta dando il via logica di business e altro codice che accade per impostare la i dati nel modello (ma lo fanno solo come parte della logica aziendale), quindi dovresti chiamare un metodo sul modello.

Una "macchina a stati" sarebbe un buon esempio di quando lo faresti. Oppure, in una galleria di immagini che ho scritto, avevo una certa logica intorno alla selezione di un'immagine da mostrare. Se un'immagine è già selezionata, non selezionarla di nuovo. Ho messo questa logica in un metodo sul mio modello immagine:

Image = Backbone.Model.extend({ 
    select: function(){ 
    if (!this.get("selected")){ 
     this.set({selected: true}); 
    } 
    } 
}); 

Come illustrato qui, mi piace correre con la semplice regola che se ho a zero logica intorno alla chiamata da impostare, quindi ho impostato direttamente da ovunque Sono. Se c'è qualche logica relativa al modello, attorno al set, allora la metto nel modello.

In entrambi i casi, quando si desidera impostare i dati, è necessario utilizzare il metodo set. Bypassare questo e impostare gli attributi del modello direttamente tramite model.attributes impedirà l'attivazione di un sacco di codice di Backbone e potenzialmente potrebbe causare problemi all'utente.

+0

+1. Bella risposta. –

1

Dipende dal tuo stile di programmazione. Li ho sempre impostati direttamente. Se il Law of Demeter ti suona bene e sei orientato agli oggetti (e possibilmente con uno sfondo in stile Java/Microsoft), lo stile sarebbe quello di creare metodi getter/setter.

Se invece si trova nel campo "Size is the Enemy" (mi raccomando anche Jeff Atwood's comments), è certamente necessario impostare direttamente i dati del modello (come ho accennato prima, sono in questo campo da solo).

Detto questo, i modelli Backbone.js hanno già metodi getter e setter .get e .set. Non si dovrebbe manipolare direttamente il membro .attributes. Non sono sicuro che non dovresti leggerlo, di solito lo faccio e non ho ancora avuto problemi a causa di ciò.

Problemi correlati