在Batman.js中返回请求结果的问题

Issues returning a Request result in Batman.js

本文关键字:结果 问题 请求 返回 Batman js      更新时间:2023-09-26

我从蝙蝠侠返回结果有问题。请求调用。我已经注释了我调用返回的区域。我很确定我不能在那里直接调用return,但我似乎找不到任何文档可以为我指明正确的方向。

模型:

class Web.Inbox extends Batman.Model
  @resourceName: 'inbox'
  @persist Web.InboxStorage
  @encodeTimestamps()
  @classAccessor 'task_entries', ->
    request = new Batman.Request
      url: 'http://0.0.0.0:3000/inbox'
      autosend: false
      success: (response) ->
        results = new Batman.Set
        results.add(Web.TaskEntry.createMultipleFromJSON(response))
        console.log(results) # The value I want is here!
        return results # I assume the issue is here
    request.send()

控制器:

class Web.InboxController extends Web.ApplicationController
  routingKey: 'inbox'
  index: (params) ->
    task_entries =  Web.Inbox.get('task_entries')
    @set('task_entries', task_entries)
    console.log(task_entries) # not the same value as I attempt to return 
                              # in the request

来自模型的控制台日志(我想要的):

Set {_storage: Array[1], length: 1, _batman: _Batman, constructor: function, isCollectionEventEmitter: true…}
_batman: _Batman
_storage: Array[1]
0: Array[15]
0: TaskEntry
1: TaskEntry
2: TaskEntry
3: TaskEntry
4: TaskEntry
5: TaskEntry
6: TaskEntry
7: TaskEntry
8: TaskEntry
9: TaskEntry
10: TaskEntry
11: TaskEntry
12: TaskEntry
13: TaskEntry
14: TaskEntry 

控制器的控制台日志:

Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}

任何帮助都是感激的!

不确定你是否在IRC中看到bradstewart的回应,以防万一,这里再看一遍:

Web.Inbox.get('task_entries')

这个访问器触发一个AJAX请求,但它是异步的。它没有返回您正在寻找的值,因为该值仍在从服务器加载。正如Brad指出的那样,访问器返回Batman.Request对象,而不是来自服务器的值。

你可以做的是让访问器返回一个Batman.Set,然后也使用访问器触发一个Batman.Request,这将加载记录到该集合。当set更新时,您的视图也将更新。例如:

  @classAccessor 'task_entries', ->
      @_entries = new Batman.Set
       new Batman.Request
        url: "/inbox"
        method: "GET"
        success: (data) =>
          records = Web.TaskEntry.createMultipleFromJSON(data)
          @_entries.add(records...) # if you're on master branch, you could use `@_entries.addArray(records)`
      return @_entries 

这将导致访问器返回一个Set,该Set最初是空的,但是该Set将由Batman.Request填充,并且您的视图将被更新。

(哎呀,从gist交叉张贴)