2012-10-15 7 views
8

इस बैकबोन संग्रहबैकबोन: संग्रह में एक मॉडल पहले से मौजूद है या नहीं, तो कैसे सत्यापित करें?

define [ 
    'underscore', 
    'backbone', 
    'cs!models/floor' 
], (_, Backbone, Floor) -> 
return Backbone.Collection.extend 
    model: Floor 
    url: -> 
    return '/api/hotels/' + @hotelId + '/floors' 
    initialize: (models, options) -> 
    if (options.hotelId) 
     @hotelId = options.hotelId 
     @.fetch() 

    parse: (response) -> 
    response.floors 

    alreadyExist: -> 
    @.filter((floor) -> 
     return floor.get('number') == @.attrs.get('number') 
    ) 

को देखते हुए और एक दृश्य के नीचे जिस तरह से, मैं कैसे मान्य कर सकते हैं अगर मॉडल पहले से ही संग्रह के भीतर मौजूद से कोई नया जोड़ते समय?

add_floor: (e) -> 
    console.log ' Saving Floor ' 
    e.preventDefault() 
    floorNumber = $('input[name=floorNumber]').val() 
    floorDescription = $('input[name=floorDescription]').val() 
    return new NoticeView({ message: "Please enter a Floor Number.", displayLength: 10000 }) unless floorNumber 
    if ! @collection.add({ number: floorNumber}).alreadyExist() 
    @collection.create({ number: floorNumber, description: floorDescription }, { 
     error: (model, response) -> 
     # $(e.target).removeClass('waiting'); 
     new ErrorView({ message: "Problem saving Floor " + response.responseText, displayLength: 10000 }) 
     success : (model, response) -> 
     console.log model 
     console.log response 
     new NoticeView({ message: "Floor successfully saved.", displayLength: 10000 }) 
    }) 
    else 
    new ErrorView({ message: "Floor already exist." + response.responseText,  displayLength: 10000 }) 
+0

संग्रह आपको लगता है कि :) यह एक त्रुटि फेंकता है (किसी भी मामले में बस में एक छोटी सी भिन्नता है क्या करने के लिए अनुमति नहीं देता: पता चल सके कि एक संग्रह एक मॉडल शामिल हैं की एक उचित तरीके से रेखांकित की इस तरह का उपयोग करना है आपके मॉडल और आप इसे सत्यापित करना चाहते हैं, 'add' ईवेंट से जुड़ें और वहां वापस सत्यापित करें) – Deeptechtons

+0

मुझे यह नहीं पता कि आप इसे किस तरह से मान्य कर सकते हैं। मैं इसे सर्वर की तरफ कर दूंगा। धन्यवाद Deeptechtons। – Aldo

+0

मैं एक उदाहरण के साथ वापस आऊंगा :) ताकि यह समस्या को हल करे – Deeptechtons

उत्तर

18

बैकबोन संग्रह अंडरस्कोर.जेएस पुनरावृत्ति फ़ंक्शन प्रॉक्सी इन मामलों में उपयोगी हैं।

यदि आप एक मौजूदा मॉडल उदाहरण है, तो जाँच करने के लिए है कि क्या यह संग्रह आप की तरह कुछ कर सकते हैं में मौजूद है:

var myModel = new Floor(); 

// the following line logs true if model is in collection, false if not. 
console.log(myCollection.contains(myModel)); 

आप मॉडल, के एक मौजूदा उदाहरण नहीं है, तो जो अपने उदाहरण से पता चलता है मामला हो सकता है, तो आप उपयोग कर सकते हैं find या findWhere को रेखांकित काम करता है, उदाहरण के लिए:

var floorNumber = $('input[name=floorNumber]').val() 
var myModel = myCollection.findWhere({ floorNumber: floorNumber }); 

तो find या findWhere एक मॉडल वापसी है, जो आप ग आसानी से कर सकता है एक typeof तुलना का उपयोग करके बिल्ली तो आपको पता चलेगा कि मॉडल संग्रह में मौजूद है या नहीं।

+0

नमस्ते अगर हम सीआईडी ​​ – Pascal

+0

@ पास्कल की जांच कर रहे हैं तो हम ढूंढने का उपयोग कर सकते हैं: आप बैकबोन द्वारा प्रॉक्सी किए गए 'findWhere' फ़ंक्शन का उपयोग नहीं कर सकते हैं 'सीआईडी' संपत्ति के रूप में मॉडल का 'सीआईडी' मॉडल विशेषता नहीं है। ऐसा करने के लिए आपको देशी अंडरस्कोर 'ढूंढ' फ़ंक्शन का उपयोग करने की आवश्यकता होगी जैसे 'var myModel = _.find (myCollection.models, function (model) {return model.cid == "c15";}); ' – dcarson

+0

धन्यवाद जिसने मदद की – Pascal

0

ढूंढें जहां किसी संग्रह पर जावास्क्रिप्ट त्रुटि नहीं होगी, लेकिन न ही मॉडल नहीं मिलेगा।

var model = _.find(collection.models, function (model) { return model.id == 

id_to_be_searched; }); 
var found = collection.contains(model); 

if (found) { 
    // do stuff 
} 
else { 
    // do stuff 
} 
संबंधित मुद्दे