我正在使用Rails应用程序,该应用程序使用Backbone处理不同页面上的一些数据,我在获取集合和创建新模型时没有任何问题,但我无法从服务器获取单个模型以便执行,说,显示或编辑。我试图按照SO上的其他类似问题的答案声明urlRoot
class Entities.Product extends Backbone.Model
urlRoot: ->
if @isNew
'/products/'
else
'/products/' + @id
我正在使用以下路线开始演出:
class ProductsUnit.Router extends Marionette.AppRouter
appRoutes:
"products/:id" : "showProduct"
API =
showProduct: (id) ->
ProductsUnit.Show.Object.showProduct()
稍后在代码中我请求产品的单个实体:
Show.Object =
showProduct: (id) ->
product = App.request "product:entity"
请求由以下处理程序处理:
App.reqres.setHandler "product:entity", ->
API.getSingleProduct id
它会触发一个产品:
getSingleProduct: (id) ->
product = new Entities.Product
id: id
product.fetch()
product
据我了解,我可以将id
从路径本身"products/:id"
传递到最终会获取模型的函数链,urlRoot
将为/products/+ @id
其中this
将表示最初从路线中获取的ID。但似乎情况并非如此,因为成功isNew
返回true
,即使我正在尝试传递ID以使其false
。
getSingleProduct: (id) ->
product = new Entities.Product
id: id
product.fetch success: ->
console.log product.isNew()
return
product
我对Backbone和Javascript都相当新,所以也许我看到逻辑的一个关键缺陷。任何指导都会非常感激,我已经坚持了几天这个非常简单的问题。
答案 0 :(得分:0)
我认为你已经交换了你的urlRoot逻辑:当模型isNew
还没有id
时。
所以它应该是:
urlRoot: ->
if @isNew
'/products/'
else
'/products/' + @id