2012-08-16 126 views
0

我无法获取表单对象发布,这里是我到目前为止只是使用测试数据我得到的setTarget.save是未定义的。我能够使用类似的结构获取/获取调用以成功工作。保存表单对象与backbone.js模型

define([ 
'jquery', 
'underscore', 
'backbone', 
'text!templates/default/parent.html' 
], function($, _, Backbone, parentTemplate) { 
var defaultView = Backbone.View.extend({ 

    initialize: function() { 
     $(this.el).html(parentTemplate); 
       this.render(); 
    }, 

      events: { 
       'click #busNext': 'showTarget' 
      }, 

      showTarget: function() { 
     this.model.set({ 
     businessName: $('#busInfoName').val(), 
     }); 
       this.model.save(); 
    }, 

      render: function() { 
       this.setValidator(); 
     return this; 
    } 

}); 
return new defaultView; 
}); 

示范

define([ 
    'underscore', 
    'backbone' 
], function(_, Backbone) { 
    var setTarget = Backbone.Model.extend({ 

    initialize: function() { 
     console.log('set target initialize'); 
    }, 

    url: 'test.htm', 

    defaults: { 
     businessName: "", 
     businessPhone: "" 
    } 

    }); 

    return setTarget; 
}); 

收集

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
'models/setTarget' 
], function($, _, Backbone, setTarget){ 
    var target = Backbone.Collection.extend({ 

    model: setTarget, 

    }); 

    return new target; 
}); 

路由器

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
'validate', 
'views/default/parent', 
'models/setTarget', 
'collections/target' 
], function($, _, Backbone, validate, defaultView, setTarget, target) { 
var AppRouter = Backbone.Router.extend({ 

    routes: { 
        '': 'defaultAction', 
        'index': 'defaultAction', 
    }, 

    defaultAction: function(actions) { 
     this.changePage(defaultView, 'fade'); 
    }, 

    changePage: function(page, pageTransition) { 
     $('body').append($(page.el)); 
     $.mobile.changePage($(page.el), { changeHash: true, transition: pageTransition  }); 
     } 

    }); 

    var initialize = function() { 
     var app_router = new AppRouter; 
     Backbone.history.start(); 
    }; 

    return { 
     initialize: initialize 
    }; 
}); 
+0

在点击后调试并检查视图中的“setTarget”对象。我猜这不是Backbone.Collection? – 2012-08-16 02:21:02

+0

我试图提供一个答案,但在任何一步我发现一个新问题。在你的示例代码中,很多情况下你正在使用_Classes_类似_instances_。你必须创建你的clases的实例,并且与不使用Classes的实例一起玩。您的RequireJS函数正在返回类而不是实例,并且您正在使用这些类而不实例化它们。不仅在'setTarget'也在'parentTemplate' ... – fguillen 2012-08-16 08:33:15

+0

感谢您的答复,我更新了代码并包含了路由器,我想我只是困惑如何设置模型,任何洞察力将不胜感激。 – user1572796 2012-08-17 07:42:10

回答

0

感谢您的意见,阅读这些条款后,我决定去这个问题的不同方式。我不是使用model.save,而是使用collectioninstancename.fetch方法,并在集合中覆盖设置,以便它POST而不是GET,它似乎工作正常。