2014-10-16 78 views
2

我收到此錯誤。我能夠使用BackboneJs進行預形成讀取和刪除功能,但是當我執行add方法時,出現錯誤,任何幫助將不勝感激。 JSfiddel路徑是http://jsfiddle.net/2wjdcgky/BackboneJS未捕獲錯誤:必須指定「url」屬性或函數

BackboneJS Uncaught Error: A "url" property or function must be specified 

$(function() { 

型號

var modelContact = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      Id: 0, 
      Name: "", 
      Address: "" 
     }; 
    }, 
    idAttribute: "Id" 
}); 

ModelCollection

var contactCollection = Backbone.Collection.extend({ 
    model: modelContact, 
    url: function() { 
     return 'api/Contact'; 
    }, 
    add: function(model) { 
     this.sync("create", model); // Error On create 
    }, 
    remove: function(model) { 
     this.sync("delete", model); //Runs Fine 
    } 
}); 
var contacts = new contactCollection; 

查看

var contactView = Backbone.View.extend({ 
    tagName: "tr", 
    events: { 
     "click a.destroy": "clear" 
    }, 
    template: _.template($("#newContacttemplate").html()), 
    initialize: function() { 
     this.model.on("change", this.render, this); 
     this.model.on('destroy', this.remove, this); 
    }, 
    render: function() { 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    }, 
    clear: function(e) { 
     contacts.remove(this.model); // runs fine 
    } 
}); 

主視圖

var main = Backbone.View.extend({ 
    el: $("#contactApp"), 
    events: { 
     "click #btnsave": "CreateNewContact" 
    }, 
    initialize: function() { 
     this.Nameinput = this.$("#contactname"); 
     this.Addressinput = this.$("#contactaddress"); 

     contacts.on("add", this.AddContact, this); 
     contacts.on("reset", this.AddContacts, this); 
     contacts.fetch(); 
    }, 
    AddContact: function (contact) { 
     console.log("AddContact"); 
     var view = new contactView({ model: contact }); 
     this.$("#tblcontact tbody").append(view.render().el); 
    }, 
    AddContacts: function() { 
     console.log("AddContacts"); 
     contacts.each(this.AddContact); 
    }, 
    CreateNewContact: function (e) { 
     console.log(e); 
     //Generate an error "BackboneJS Uncaught Error: A "url" property or function must be specified" 
     contacts.add({ Name: this.Nameinput.val(), Address: this.Addressinput.val() }); 
    } 
}); 
var m = new main; 

});

+0

你重寫標準Backbone.Collections方法與「添加」,「刪除」等等,這可能會導致意外的行爲。最好給那個函數名稱一些意思,或者直接使用標準函數名稱。如果你想保存一個聯繫人並將其添加到集合中,請調用model.save()並將其添加到你的''成功'處理程序中的集合... – CharlieBrown 2014-10-16 13:14:30

+0

注意點但我的刪除方法工作正常,我已經覆蓋它也。 – 2014-10-16 13:19:03

回答

0

同步方法嘗試同步到服務器設置來處理它,並具有CRUD功能。如果那不是你正在尋找的東西,而你只是想在客戶端顯示這些信息,而不是使用同步,則應該使用Collection.add(model)和Collection.remove(model)

+0

而你的刪除工作,因爲你沒有訪問你的覆蓋刪除方法那裏,超出範圍,你引用我剛纔提到你應該使用的定期刪除。同樣,同步方法僅用於與RESTful服務器進行交互,如果服務器未正確處理請求,它將拋出url錯誤。 – frajk 2014-10-16 13:21:34

+0

我有一個服務器設置asp.net webapi。它被稱爲罰款並回應Post/Delete/PUT請求。我應該如何調用覆蓋刪除或任何替代 – 2014-10-16 13:25:54

+0

其實,對不起,您的刪除可能被調用正確,我剛剛打開你的JSFiddle,並指出你有所有的Javascript代碼在一起。如果要將收集和查看分離爲兩個獨立的文件,則需要全局名稱空間。所以哪一個不起作用,添加或刪除,因爲在你的描述中你說刪除不起作用,但是在代碼中的註釋中說明了添加不起作用。哪行代碼導致錯誤? – frajk 2014-10-16 13:36:56

3

您的JSFiddle缺少骨幹引用和所有。

工作更新:http://jsfiddle.net/apt7hchL/2/

很多簡單的代碼(無需定義在收集這些addremove方法!)。還有更常見的Javascript編碼風格約定。

請注意我必須手動生成「Id」屬性才能創建多個聯繫人。由於默認情況下使Id = 0,所以不添加第二個模型,因爲Backbone發現id = 0的模型已經在集合中。

想要保存時,請調用model.save()方法。不要手動調用同步,你通常不需要!

爲使模型能夠被添加到集合之前被保存到數據庫中,使用方法:

createNewContact: function (e) { 
    e.preventDefault(); 
    var self = this; 
    var newContact = new ContactModel({     
    Name: this.$("#name").val(), 
    Address: this.$("#address").val() 
    }); 
    newContact.save({ success: function(model){ 
    self.collection.add(model); 
    }); 

    //clear form 
    this.$("#name").val(""); 
    this.$("#address").val(""); 

}

相關問題