所以,我有这个代码(剥离)
var Categories;
Categories = {url:'someurl', list : [] };
Categories.CreateCategory = function ()
{
// do some checks
// gather some data
$.ajax( {/*ajax options here, expecting JSON format*/} )
.done(function ( data )
{
var ctg = new Category();
ctg.Id = data.id;
Categories.list[ctg.id] = ctg;
} )
}
但是,新类别不会附加到列表中。
我试过
var s=Categories; ...; s.list[ctg.Id] = ctg; Categories = s; )
这些都不起作用。
更多信息
CreateCategory方法旨在用于网站的管理面板,这就是我需要在单独的脚本中扩展Categories类的原因。
以前的版本包含整个版本的Categories类,其中一堆代码与用户版本相同,就像魅力一样。
解决
事实证明我的代码中有一个拼写错误。
Categories.list[ctg.id] = ctg;
应该是
Categories.list[**ctg.Id**] = ctg;
答案 0 :(得分:3)
有一个拼写错误:
Categories.list[ctg.id] = ctg;
ctg.id
应为ctg.Id
答案 1 :(得分:1)
也会失败,如果您发现错误,则可以使用.push
来更新.length
属性
var Categories;
Categories = {url:'someurl', list : [] };
Categories.CreateCategory = function ()
{
// do some checks
// gather some data
$.ajax( {/*ajax options here, expecting JSON format*/} )
.done(function ( data )
{
var ctg = new Category();
ctg.Id = data.id;
Categories.list.push(ctg);
} )
.fail(function(){
console.log("error on get category");
console.log(arguments);
})
}
答案 2 :(得分:0)
此处的问题似乎是Categories.list
是一个数组,但您通过Categories.list[ctg.id]
分配了一个属性。 @tpb正确地指出你在那里有一个拼写错误,这可能是你问题的根源,但是这是否会按预期工作将取决于id
属性的值。你几乎肯定想要:
.push()
将新值添加到数组中,或list
的数组。测试:
var a = [];
a["foo"] = 1; // a now has a property called "foo", but it's not an array member
a; // []
a[10] = 2; // a has 2 at pos 10, which sticks in 10 undefined values
a; // [undefined x 10, 2]
因此,如果您确切知道id
值集合都是数字且密集连续,那么这只是一个好主意。