0

我有一个这样的搜索模型(从https://github.com/maccman/quora2得到这个)

Spine = require('spine')

classMethods = 
  query: (params) ->
    @select (rec) ->
      rec.query params

instanceMethods =
  query: (params) ->
    attributes = @query_atts?() || @attributes()
    for key of attributes
      value = attributes[key]
      if value?.query?(params).length
        return true
      else if value && typeof value == "string"
        value = value.toLowerCase()
        return true if value.indexOf(params) != -1
    return false

class Search extends Spine.Class
  @include Spine.Events

Search.Model = 
  extended: ->
    @extend  classMethods
    @include instanceMethods

Search.include
  init: (models...) ->
    console.log('models: ', models)
    @models  = models
    @results = []

  query: (params) ->
    @clear()
    return unless params
    @params = params.toLowerCase()
    @models.forEach (model) =>
      console.log(typeof(model))
      continue until typeof(model) == 'undefined'
      results  = model.query(@params)
      @results = @results.concat(results)

    @trigger "change"

  clear: ->
    @results = []
    @trigger "change"

  each: (callback) ->
    @results.forEach(callback)

module.exports = Search

和一个页面模型:

Spine = require('spine')

class Page extends Spine.Model
  @configure 'Page', 'title', 'description'

  @extend require('models/search').Model

  constructor: ->
    super

module.exports = Page

我遇到的问题是,每当在我的控制器中实例化搜索时:

Search.init(Page)并记录init得到的参数我有页面作为第一个参数,然后我有4个未定义。

models:  [Page(title, description), undefined, undefined, undefined, undefined]

这些是从哪里来的?当然它在 quora 中运行良好,如果我不在models...init 中使用它也会运行良好。

4

1 回答 1

2

你打电话时

Search.init

调用该Module.init方法,在 Spine 中定义如下

Module.init = Controller.init = Model.init = (a1, a2, a3, a4, a5) ->
  new this(a1, a2, a3, a4, a5)

(注意Spine.Class= Module。)然后调用从继承Search的构造函数,它将所有这些参数转发给附加到原型的方法:ModuleinitSearch.includeSearch

constructor: ->
  @init?(arguments...)

因此有四个未定义的参数(最初a2是 、a3a4a4)。

于 2012-05-16T19:57:40.017 回答