Backbone.js 获取单个主干模型
我正在使用Rails应用程序,它使用主干网来处理不同页面上的一些数据,我在获取集合和创建新模型方面没有问题,但我无法从服务器获取单个模型来执行(比如)显示或编辑。我试图根据其他类似问题的答案声明Backbone.js 获取单个主干模型,backbone.js,fetch,Backbone.js,Fetch,我正在使用Rails应用程序,它使用主干网来处理不同页面上的一些数据,我在获取集合和创建新模型方面没有问题,但我无法从服务器获取单个模型来执行(比如)显示或编辑。我试图根据其他类似问题的答案声明urlRoot,因此: class Entities.Product extends Backbone.Model urlRoot: -> if @isNew '/products/' else '/products/' + @id 我使用以下路线开始
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"
getSingleProduct: (id) ->
product = new Entities.Product
id: id
product.fetch()
product
然后由以下处理程序处理请求:
App.reqres.setHandler "product:entity", ->
API.getSingleProduct id
它会激发单个产品的回执:
Show.Object =
showProduct: (id) ->
product = App.request "product:entity"
getSingleProduct: (id) ->
product = new Entities.Product
id: id
product.fetch()
product
据我所知,我可以将一个id
从路由本身“products/:id”
传递到最终将获取模型的函数链,urlRoot
将是/products/+@id
,其中这将表示最初从路由获取的id。但是这里的情况似乎不是这样,因为在success上,isNew
返回为true
,即使我试图传递id使其成为false
getSingleProduct: (id) ->
product = new Entities.Product
id: id
product.fetch success: ->
console.log product.isNew()
return
product
我对主干网和Javascript都相当陌生,所以我对逻辑的理解可能存在一个关键缺陷。任何指导都将不胜感激,我已经被这个相当简单的问题困扰了好几天。我认为您已经交换了urlRoot逻辑:当模型是新的时,它还没有id
因此,它应该是:
urlRoot: ->
if @isNew
'/products/'
else
'/products/' + @id
谢谢你的回复!但在其他情况下,假设我试图获取的模型的值为true,即使我传递的是id属性--id:id
。主干调试器显示有一个URL为“/products/”的模型,并且该模型的属性中包含现有模型的整个堆栈。我获取模型的方式是否有任何错误?我也根据您的观察更新了问题。