我正在尝试创建一个小的backbone.js应用程序,但是对事物的顺序很难.
在我的html文件中,标题中有两个脚本块:@H_502_3@
- <script type="text/template" id="model-template">
- <a href="#"><%= title %></a>
- </script>
- <script type="text/javascript">
- jQuery(function(){
- window.model.fetch();
- });
- </script>
在我的app.js中,我定义了一个简单的模型,视图和路由器.@H_502_3@
- (function($) {
- window.MyModel = Backbone.Model.extend({
- url: '/mymodel'
- });
- window.mymodel = new MyModel();
- $(document).ready(function() {
- window.MyModelView = Backbone.View.extend({
- template: _.template($('#mymodel-template').html()),initialize: function () {
- _.bindAll(this,'render');
- },render: function () {
- var renderedContent = this.template(this.model.toJSON());
- $(this.el).html(renderedContent);
- return this;
- }
- });
- });
- window.MyApp = Backbone.Router.extend({
- routes: {
- '': 'home'
- },initialize: function () {
- this.myModelView = new MyModelView({
- model: window.mymodel
- });
- },home: function() {
- var $body = $('body');
- $body.empty();
- $body.append(this.myModelView.render().el);
- }
- });
- $(function() {
- window.App = new MyApp();
- Backbone.history.start({pushState: true});
- });
- })(jQuery);
该应用程序由简单的sinatra应用程序提供服务. url / mymodel提供静态json文件:@H_502_3@
- {
- "title": "My Model",}
加载应用程序时,我在javascript控制台中收到错误:@H_502_3@
- Uncaught ReferenceError: title is not defined
问题似乎是,视图在从服务器获取模型之前呈现自身.这是为什么?@H_502_3@
昨天,我关注了PeepCode的前两个backbone.js截屏视频.我试图将我的应用程序与截屏视频中的应用程序进行比较,但是看不出我的应用程序为什么需要工作的原因.@H_502_3@
有什么建议?@H_502_3@
解决方法
在这种情况下,您应该引导模型数据,以便在页面加载时可用.
代替@H_502_3@
- window.model.fetch();
把这样的东西放进去(如果使用.erb)@H_502_3@
- <script>
- window.model = new MyModel(<%= @model.to_json %>);
- </script>
绑定视图以在模型更改时进行渲染@H_502_3@
- initialize: function () {
- _.bindAll(this,'render');
- this.model.on("change",this.render);
- },
或处理model.fetch的成功并呈现视图@H_502_3@
- window.model.fetch({
- success: function (model,response) {
- window.MyApp.myModelView.render();
- }
- });