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

および Page モデル:

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)そして、初期化が引数として取得するものをログに記録します。最初の引数としてページがあり、次に4つの未定義があります。

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

これらはどこから来たのですか?もちろん、それは quora で問題なく動作models...し、init で使用しなければ問題なく動作します。

4

1 に答える 1

2

電話するとき

Search.init

Spineで次のようModule.initに定義されたメソッドを呼び出します。

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

Spine.Class( =に注意してください。)次に、から継承されたコンストラクターをModule呼び出します。コンストラクターは、これらすべての引数を、プロトタイプにアタッチされたメソッドに転送します。SearchModuleinitSearch.includeSearch

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

したがって、4つの未定義の引数(元々a2a3、、、、a4およびa4)。

于 2012-05-16T19:57:40.017 に答える