我创建了我的网站有2种类型的用户:管理员和用户。所以,我创建了3个页面mainpag.html
,admin.html
,user.html
。和单独的模型,视图,集合,routers.js
文件为他们每个人。登录后,因为我发送用户到不同的HTML页面与不同的模型,我不能自动获得用户模型。所以我这样做:
首先,我对服务器进行 AJAX 调用,请求_id
(会话中的用户名,这样我就可以获得id)
从id中,我通过model.fetch()
获取了模型,然后我得到了包含所有属性的用户模型。
然后在fetch的成功回调中,我做了model.save({weight: "somevalue"})
。根据我的说法,它应该正确更新,因为模型已经可用,该属性权重也可用,但它正在发送POST请求,而且当我尝试model.isNew()
时,它返回true。我哪里错了?我如何更新我的模型?如果需要,我会发布更多细节。
更多详情:
如果我删除了保存方法,那么我将在模型中获得正确的属性。
如果我不删除保存方法,那么成功和错误回调也会作为属性出现在模型中。
编码:
addWeight : (e)->
arr=new Array()
arr['_id']=app._id
console.log "asdasd"
console.log arr
console.log arr['_id']
@user_model =new UserModel(arr)
@user_model.fetch({
success : (model,res,options) =>
console.log model
console.log res
arr=new Array()
arr['_id']=e.target.id
#arr['action']='weight' #means , update weight
#@user_model.setArr(arr)
#@user_model.set({weight : arr['_id']})
console.log "new : "+@user_model.isNew()
@user_model.save({weight : e.target.id})
#@user_model.save({
# success : (model,res,options) =>
# console.log "model updated: "+JSON.stringify(model)
# console.log "Res : "+JSON.stringify(res)
# error : (model,res,options) =>
# console.log "Error : "+JSON.stringify(res)
#})
error : (model,res,options) =>
console.log "Error "
})
上面代码是用coffeescript编写的,所以即使你不懂coffeescript,也不用担心,你可以很容易地理解,而那些#
的意思是,它是一个注解。
还有一个疑问,一个模型的URL必须根据需求动态地改变,对吗?实现这一点的最好方法是什么?我是这样做的:
我正在填充包含URL中应该存在的必填字段的“array”。在model,s init func中,我使用@arr=arr
,然后在URLs函数中,我这样检查。
url : ->
if @arr['id']
"/user/#{@id}"
我的方法是正确的吗?或者有更好的方法来动态设置URL。或者我可以直接设置URL,如下所示:
@user_model.setUrl "/someurl/someid" //this setUrl method is available in model's definition
@user_model.fetch() or save() or watever that needs url
2条答案
按热度按时间utugiqy61#
这只是一种直觉,但您提到了调用
model.fetch()
来检索_id
字段。请确保返回id
字段而不是_id
(注意下划线)。返回
true
的model.isNew()
调用指示从未从model.fetch()
调用中设置id
属性。我期待着一个可能的进一步解释与您的代码...查看您的代码:
tpgth1q72#
其实如果你打电话
它将更新模型中的值,但不会发送POST请求
实际上调用了Backbone.sync,您可能知道。
编辑:
你可能想
每个模型,因为isNew方法实际上检查模型是否有id属性
关于这一点,您可以在这里看到.set不调用backbone.sync:http://jsfiddle.net/5M9HH/1/