我有一个Rails /骨干应用程序我正在努力。我想将来自Rails的一个属性转换为骨干中的javascript数组。
Rails以字符串化的JSON(我认为)
提供属性$(function () {
App.initialize({ projectsJson: [{"skill":"[\"Beginner\",\"Advanced\"]"}] });
});
然后尝试在骨干中转换它:
App.Models.Project = Backbone.Model.extend({
initialize: function() {
this.set({
skill: JSON.parse(this.get('skill'))
});
}
我收到此错误:未捕获的SyntaxError:意外的令牌B
我已尝试检查devtools中的属性:
var test = this.get('skill');
其中显示:" ["初学者","高级"]"
和
var test = JSON.parse(this.get('skill'));
其中显示了一个包含2个元素的数组对象。
如果我创建一个新属性:
this.set({
skillTEST: JSON.parse(this.get('skill'))
});
然后我可以使用这个新属性,它可以作为一个数组正常工作。我很困惑。为什么我无法更改原始属性?
有更好的方法吗?我真正想要的是来自rails的字符串作为骨干中的数组。
更新
我采用了基于梅加尔答案的新方法。我决定不将数组作为JSON传递。
代码:
JSON.stringify(new Array("Beginner","Advanced"));
产生:" ["初学者","高级"]"
backbones collection.create方法正在发送一个POST请求:
{"技术人员":" [\"初级\" \"高级\"]"}
我无法弄清楚如何解决这个问题,所以我停止使用JSON.stringify。
答案 0 :(得分:1)
字符串"\"Beginner\",\"Advanced\"]"
无效JSON,所以不,它不会解析。
您需要停止使用JSON(它真的不明白为什么你在这里)或使用格式正确的JSON字符串。
在第一种情况下,您只需传递JavaScript数组,并使用数组文字指定您的配置:
App.initialize({ projects: [{skill: ['Beginner', 'Advanced']}] });
在第二种情况下,您需要生成一个有效的JSON字符串以便解析它:
App.initialize({ projectsJson: [{skill: '["Beginner","Advanced"]'}] });
在任何一种情况下,您都可以通过选择正确的引号使自己变得更容易,这样您就不需要转义内部引号,也不会不必要地将对象文字键包装在引号中。