Dorsale: Comment valider si un Modèle existe déjà dans une Collection?
Compte tenu de cette épine Dorsale de la Collection
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')
)
et d'ajouter un nouveau Modèle à partir d'une vue de la façon ci-dessous, comment puis-je valider si le modèle existe déjà dans la collection ?
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 })
La Collection ne vous autorise pas à le faire 🙂 il renvoie une erreur (En tout cas, il y a une variation mineure de vos modèles, et vous souhaitent la valider, de les lier à des
Je ne peux pas comprendre comment faire pour valider la façon dont vous le dire. Je vais le faire côté serveur. Grâce Deeptechtons.
je reviendrai vers vous avec un exemple 🙂 de sorte qu'il permettrait de résoudre le problème
add
de l'événement et de valider retour)Je ne peux pas comprendre comment faire pour valider la façon dont vous le dire. Je vais le faire côté serveur. Grâce Deeptechtons.
je reviendrai vers vous avec un exemple 🙂 de sorte qu'il permettrait de résoudre le problème
OriginalL'auteur Aldo | 2012-10-15
Vous devez vous connecter pour publier un commentaire.
Épine dorsale des collections de procuration de la Underscore.js l'itération des fonctions qui sont utiles dans ces cas.
Si vous disposez d'un modèle existant exemple, pour vérifier qu'il n'existe dans la collection, vous pouvez simplement faire quelque chose comme:
Si vous ne disposez pas d'une instance existante de le modèle, ce qui partir de votre exemple peut être le cas, vous pouvez utiliser le
find
oufindWhere
trait de soulignement fonctions, par exemple:Si
find
oufindWhere
retour d'un modèle, que vous pouvez facilement vérifier à l'aide d'untypeof
comparaison, alors vous saurez que si le modèle existe dans la collection ou pas.Vous ne pouvez pas utiliser la
findWhere
fonction mandaté par l'épine Dorsale à la recherche d'un modèle decid
comme lecid
propriété n'est pas un attribut du modèle. Pour ce faire, vous devez utiliser le natif de Soulignementfind
fonction comme cecivar myModel = _.find(myCollection.models, function(model){return model.cid == "c15";});
Merci ça a aidé
OriginalL'auteur dcarson
findWhere sur une collection n'entraînera pas d'erreur JavaScript, mais ne trouvez pas un modèle non plus. Un bon moyen de vérifier si la collection contient un modèle est d'utiliser le trait de soulignement est de trouver comme ceci:
OriginalL'auteur azakgaim