I'm having a problem with this software http://dev.wikidiscussion.ozfraier.stackmobapp.com
which is a variation on the todos coffeescript example http://jasongiedymin.github.com/backbone-todojs-coffeescript/docs/coffeescript/todos.html
A list element is called Proposition and has two arrays of strings, negative and positive.
Strings entered on the input boxes positive and negative found on each element should be saved to these arrays, and presented under the element. This all worked when I used Backbone/localstorage (sorry if I confuse the terms) as my datastore. but when I moved it to Stackmob, it stopped working, generating this error on POST
{"error":"Field negative is an incompatible type, please check your schema; It was passed in as ClientDataString()"}
and this error on PUT
{"error":"positive has invalid type, please check your schema"}
I checked my schema for negative and positive and it says array[string]
this is my code for saving the string:
savepos: (el) ->
@save (positive: @get('positive') + el)
found in class Proposition extends StackMob.Model
this is the function callin the savepos function
pushPosOnEnter: (e) ->
if e.keyCode != 13
return
Propositions.create( @newAttributesP() )
@model.savepos ("<a href =\"#" + @inputp.val() + "\"><ul>" + @inputp.val() + "</a></ul>")
@inputp.val('')
found in class PropositionView extends Backbone.View
The entire code I wrote I will add as a comment, because I don't have enought reputation to post 4 links.
A list element is called Proposition and has two arrays of strings, negative and positive.
So positive
is an array. Then you do this to add another element:
@save (positive: @get('positive') + el)
el
here is a string and @get('positive')
is an array, array + string
is another string and that explains the error messages.
I think you want to do this:
a = _(@get('positive')).clone()
a.push(el)
@save(positive: a)
or, if you don't mind altering the model's positive
attribute without the model knowing about it:
a = @get('positive')
a.push(el)
@save(positive: a)
Note that get
returns a reference to something in the model
's attributes
so you might want to clone the returned array before altering it by calling push
. If you use the second approach, then @attributes['positive']
will be changed by the push
but the underlying Backbone stuff won't know about it and that may or may not be a problem for you. I would err on the side of caution and clone it even though the save
call should trigger all the expected events.