underscore libreria framework findwhere empty chunk backbone javascript asp.net-mvc backbone.js

javascript - libreria - underscore empty object



BackboneJs: cómo arranco mis datos en el marcado de la página y cuándo los asigno a mis colecciones (3)

El excelente ejemplo de Derick! Para MVC 3+ use esta sintaxis:

<script language="javascript"> var myApp = new MyApp( @Html.Raw(Json.Encode(Model)) ); myApp.start(); </script>

Entonces, al crear una aplicación que usa múltiples colecciones globales (2 por ahora), es un catálogo de documentos y pacientes, tienen relaciones, pero no como en 1 documento o una lista de documentos que pertenecen a 1 paciente, por lo que son de hecho 2 colecciones separadas,

Mi aplicación está estructurada en un sistema de módulos muy similar a como se describe aquí: http://weblog.bocoup.com/organizing-your-backbone-js-application-with-modules

la documentación de backbone.js dice acerca de los programas de arranque, para hacer algo como esto,

<script> Accounts.reset(<%= @accounts.to_json %>); </script>

que está dentro de una aplicación de Rails, sin embargo, tendría que hacerlo de manera diferente en asp.net MVC3, lo más probable es que simplemente imprimiera mi cadena json sin el <% =%> que no es el estilo del motor de visualización de razor)

pero mi pregunta aquí es,

este Accounts.reset(...data...); simplemente está flotando en algún lugar de mi marca, no está bien estructurado en mi sistema de módulos, ¿no hay una manera de hacerlo? ¿Dónde puedo obtener los datos desde mi módulo?

y otra pregunta adicional, supongamos que tengo una ruta en mi aplicación troncal http://example.com/#documents

y alguien llama a este enlace directamente, ¿mi aplicación tendrá los datos listos (desde el inicio) a tiempo, antes de que se ejecute la ruta?


Si está en Rails: además de la respuesta de Dericks, es posible que desee utilizar Gon para "obtener las variables de Rails en su js".

luego inicializarías tu aplicación así:

<script language="javascript"> var myApp = new MyApp(gon.mymodels); myApp.start(); </script>


Tiendo a configurar objetos de application , un objeto que encapsula todo el código necesario para iniciar mi aplicación. Luego tomo los parámetros en el constructor de ese objeto, para que puedan ser utilizados por el objeto de la aplicación. Pasar datos JSON precargados en el objeto de la aplicación es una de las cosas que hago para mantener el código sano y encapsulado.

Va algo como esto, por lo general:

MyApp = (function(Backbone, _){ var MyModel = Backbone.Model.extend({}); var MyCollection = Backbone.Collection.extend({ model: MyModel }); var MyView = Backbone.View.extend({ initialize: function(){ this.collection.bind("reset", this.render, this); }, render: function(){ // do stuff with the collection here } }); var myApp = function(initialModels){ this.start = function(){ this.models = new MyCollection(); this.myView = new MyView({collection: this.models}); this.models.reset(initialModels); }; }; return myApp; })(Backbone, _);

Y luego en mi página que necesita iniciar la aplicación, hago esto:

<script language="javascript"> var myApp = new MyApp(<%= mymodels.to_json %>); myApp.start(); </script>

Esa es la versión de rieles por supuesto. Simplemente reemplace <%= ... %> con su versión para la sintaxis de Razor en ASP.NET MVC.