使用backbonejs和jquery将模型同步到asp.net服务器

时间:2011-10-06 05:23:46

标签: javascript asp.net rest backbone.js underscore.js

我希望看到在扩展模型上指定model.save()时如何使用urlRoot方法将模型保存到服务器,但是当我要求model.fetch()时,ajax请求永远不会触发do model.save()。注意:希望这可以不使用我想的收集吗?。

HTML

<div id="placeholder"></div>
<script type="text/template" id="view_template">
    Hello <%= name %>, here is your script <%= script %>
</script>

模型

 window["model"] = Backbone.Model.extend({
        initialize: function () {
            console.log("CREATED");
        },
        defaults:{
            name:"Please enter your name",
            script:"Hello World"
        },
        urlRoot: "index.aspx",
        validate: function (attrs) {

        },
        sync: function (method, model, success, error) {
            console.log("SYNCING", arguments);
        }
    });

视图

 window["view"] = Backbone.View.extend({
        template:_.template($("#view_template").html()),
        initialize: function () {
            console.log("INITIALISED VIEW");
            this.model.bind("change","render",this);
        },
        render: function (model) {
                console.log("RENDERING");
                $(this.el).append(this.template(model));
                return this;
        }
    });

应用

$("document").ready(function () {

    var myModel = new model({
        name: "Stack Overflow",
        script: "alert('Hi SO')"
    });

    var myView = new view({
        model: myModel,
        el: $("#placeholder")

    });

    console.log("SAVING");
    myModel.save();        
    console.log("FETCHING");
    myModel.fetch();


});

正如您在应用程序中看到的那样,我致电save & fetch,但根据文档,这应该使用POST -> SAVE&amp; GET -> FETCH。但它所做的只是在同步函数中将日志的参数引入控制台。

1 个答案:

答案 0 :(得分:1)

我认为您没有看到任何Ajax请求的唯一原因是您已重写Model.sync方法。通常,如果要替换Backbone.sync中实现的默认Ajax同步,则只会执行此操作。请参阅backbone.js中的Model.fetch中的以下行:

return (this.sync || Backbone.sync).call(this, 'read', this, options);

我使用您的代码进行了快速测试,如果我重命名您的Model.sync方法,我会看到Ajax请求。