backbone.js 无法将字符串保存到stackmob上的字符串数组中

myss37ts  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(176)

这个软件http://dev.wikidiscussion.ozfraier.stackmobapp.com有问题
它是Todos咖啡脚本示例http://jasongiedymin.github.com/backbone-todojs-coffeescript/docs/coffeescript/todos.html的变体
一个列表元素叫做Proposition,它有两个字符串数组,一个是负数,一个是正数。
在输入框中输入的字符串,在每个元素中找到的正数和负数,应该保存到这些数组中,并显示在元素下。当我使用Backbone/localstorage(抱歉,如果我混淆了术语)作为我的数据存储时,这一切都工作正常。但是当我将它移动到Stackmob时,它停止工作,在POST中产生了这个错误
{“error”:“字段negative是不兼容的类型,请检查您的架构;它是作为ClientDataString()"}传入的
和PUT上的错误
{“error”:“positive具有无效的类型,请检查您的架构”}
我检查了模式的正负,结果显示为array[string]
这是我保存字符串的代码:

savepos: (el) ->
       @save (positive: @get('positive') + el)

在类中找到Proposition扩展StackMob.Model
这是调用savepos函数的函数

pushPosOnEnter: (e) ->
        if e.keyCode != 13 
           return
        Propositions.create( @newAttributesP() ) 
        @model.savepos ("<a href =\"#" + @inputp.val() + "\"><ul>" + @inputp.val() +   "</a></ul>") 
        @inputp.val('')

在PropositionView类中找到扩展 Backbone.js 视图
我写的整个代码,我将添加为一个评论,因为我没有足够的声誉后4个链接。

ego6inou

ego6inou1#

一个列表元素叫做Proposition,它有两个字符串数组,一个是负数,一个是正数。
所以positive是一个数组。然后你这样做来添加另一个元素:

@save (positive: @get('positive') + el)

这里的el是一个字符串,@get('positive')是一个数组,array + string是另一个字符串,它解释了错误消息。
我想你要这样做:

a = _(@get('positive')).clone()
a.push(el)
@save(positive: a)

或者,如果您不介意在模型不知道的情况下修改模型的positive属性:

a = @get('positive')
a.push(el)
@save(positive: a)

注意get返回一个对modelattributes的引用,所以在调用push改变数组之前,你可能需要克隆返回的数组。如果你使用第二种方法,那么@attributes['positive']将被push更改,但底层的Backbone组件不会知道这一点,这对您来说可能是个问题,也可能不是。即使save调用应该触发所有预期的事件,我还是会谨慎地克隆它。

相关问题