Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 获取单个主干模型_Backbone.js_Fetch - Fatal编程技术网

Backbone.js 获取单个主干模型

Backbone.js 获取单个主干模型,backbone.js,fetch,Backbone.js,Fetch,我正在使用Rails应用程序,它使用主干网来处理不同页面上的一些数据,我在获取集合和创建新模型方面没有问题,但我无法从服务器获取单个模型来执行(比如)显示或编辑。我试图根据其他类似问题的答案声明urlRoot,因此: class Entities.Product extends Backbone.Model urlRoot: -> if @isNew '/products/' else '/products/' + @id 我使用以下路线开始

我正在使用Rails应用程序,它使用主干网来处理不同页面上的一些数据,我在获取集合和创建新模型方面没有问题,但我无法从服务器获取单个模型来执行(比如)显示或编辑。我试图根据其他类似问题的答案声明
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/”的模型,并且该模型的属性中包含现有模型的整个堆栈。我获取模型的方式是否有任何错误?我也根据您的观察更新了问题。