Usando Ember.js e manubri, qual è la differenza tra vincolante un modello a una vista di classe vs istanza di vista?

StackOverflow https://stackoverflow.com//questions/12663684

Domanda

Caso I. Modello di bandire all'istanza di vista.

Ad esempio, diciamo che ho un modello:

    <script type="text/x-handlebars" data-template-name="instance-template">
        <b> Name: </b> {{ name }}
    </script>
.

Posso quindi associare un'istanza di visualizzazione e aggiungere al documento (per semplicità, il nome del parametro viene dichiarato in vista, al contrario di rilegatura a un po 'di controllo):

App.instanceView = Ember.View.create({
    templateName: 'instance-template',
    name: 'hello world'
}).append();
.

Che cosa sta succedendo esattamente dietro le quinte qui? Specificando un nome modello, è questa istanza di vista in qualche modo prendere un modello e la compilando con i parametri passati in background?

Caso II. Modello di rilegatura alla vista di classe, modello non denominato.

Se, tuttavia, voglio vincolare un modello a una vista di classe come:

App.ViewClass = Ember.View.extend({
    name: 'hello world',
});
.

La documentazione utilizza un modello di questo modulo:

<script type="text/x-handlebars">
    {{ #view App.ClassView }}
        This part renders: {{ name }} 
    {{ /view }}
</script>
.

Si prega di notare, quando lo faccio, per qualche motivo questo non funziona. La citazione 'Questa parte rendering: "nel modello rendering effettivamente, tuttavia il tag {{name}} non è reso. Non ho idea del perché.

Caso III. Modello Bind to Class View, il modello è denominato.

Inoltre, se nomina il modello sopra:

<script type="text/x-handlebars" data-template-name = 'class-template'>
    {{ #view App.ClassView }}
        This part renders: {{ name }} 
    {{ /view }}
</script>
.

e cambia la vista su

App.ViewClass = Ember.View.extend({
    templateName: 'class-template',
    name: 'hello world',
});
.

Niente rende affatto. Di nuovo non vedo cosa sta succedendo qui.

È stato utile?

Soluzione

Caso 1 Abbastanza.La vista è il rendering (e stiamo assumendo il contesto è la vista), quando vediamo {{name}}, questo sarà equivalente a instanceView.get('name').

Caso 2 I modelli anonimi non cambiano il contesto.Quando si definisce un modello all'interno del {{#view}} il contesto non cambierà.Per ottenere il contesto della vista utilizzato con l'aiutante {{#view}}, dovrai utilizzare view.name.Ad esempio:

App.ViewClass = Ember.View.extend({
    name: 'hello world',
});

<script type="text/x-handlebars">
    {{name}} <!-- lets pretend this is "something else" -->
    {{#view App.ClassView}}
        This part renders: {{name}} <!-- "something else" -->
        {{view.name}} <!-- "hello world" -->
    {{/view}}
</script>
.

Caso 3 Questo esempio non ha senso e probabilmente dovrebbe avere un'asserzione fallire con Ember (versione non minificata).Stai definendo una vista che utilizza un modello, quindi all'interno di quel modello rendendo la stessa vista di nuovo con un modello anonimo.Se questo è il significato previsto, potresti fornire un caso di utilizzo perché probabilmente c'è un modo molto più semplice per andare su waht che stai cercando di realizzare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top