Meteor xwidgets集合未定义

时间:2014-07-26 11:17:00

标签: meteor

我正在尝试实现xwidgets(自动扩展以执行自动填充等操作)

它不起作用,因为它假装集合以获取自动完成值未定义。

我不明白为什么不明确。

这就是我所拥有的:

@Contacts = new Meteor.Collection("contacts")
@Tenants = new Meteor.Collection("tenants")

这是我的表单模板:

template(name="newTenant")
    #newTenant.hidden
        .animated.fadeIn
            h4 Add a new tenant for this space
                .space-12
                +autoForm(collection="Tenants" id="insertTenantForm" type="insert")
                    fieldset
                        +afFieldInput(name="contact_id" references="contacts.lastname" call="contacts" template="tags")
                        +afQuickField name="rent"
                        +afQuickField name="costs"
                        +afQuickField name="entry_date" class="datepicker duration"
                        +afQuickField name="contract_duration" class="duration"
                        +afQuickField name="exit_date" class="datepicker"
                        +afQuickField name="contract_type" options="allowed"
                     .btn-group
                        button(type="submit" id="createTenant" class="btn btn-default") Submit
                        a(href="#" id="cancelNewTenant" class="btn btn-danger") Cancel
            +contentFor "modal"
                +newContact
            each contacts
                .editable(_id="{{_id}}") {{_id}}

这些是我的帮手:

Template.newTenant.helpers
  space_id: -> Router.current().params._id
  contacts: -> Contacts.find()

租户在铁路由器中定义。出版物还可以。 联系人定义正确(在每个块中浏览)

但是我在keyup上收到以下错误消息:

Exception in delivering result of invoking 'contacts': TypeError: Cannot read property 'length' of undefined
    at http://localhost:3000/packages/xwidgets.js?0ba0b616c9af16bc49b0ad59d8e950507492d9e0:629:41
    at null._callback (http://localhost:3000/packages/meteor.js?439f867e12888606900664d4463e1b3ee3644e44:818:22)
    at _.extend._maybeInvokeCallback (http://localhost:3000/packages/livedata.js?f42db198bc25553e9f50ea290229c73093a576b3:3782:12)
    at _.extend.dataVisible (http://localhost:3000/packages/livedata.js?f42db198bc25553e9f50ea290229c73093a576b3:3811:10)
    at http://localhost:3000/packages/livedata.js?f42db198bc25553e9f50ea290229c73093a576b3:4575:7
    at Array.forEach (native)
    at Function._.each._.forEach (http://localhost:3000/packages/underscore.js?0a80a8623e1b40b5df5a05582f288ddd586eaa18:156:11)
    at _.extend._runAfterUpdateCallbacks (http://localhost:3000/packages/livedata.js?f42db198bc25553e9f50ea290229c73093a576b3:4574:7)
    at _.extend._livedata_data (http://localhost:3000/packages/livedata.js?f42db198bc25553e9f50ea290229c73093a576b3:4564:10)
    at onMessage (http://localhost:3000/packages/livedata.js?f42db198bc25553e9f50ea290229c73093a576b3:3643:12)

我想这是数据上下文范围的问题,但我不知道它来自哪里。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定,但初看时我认为references="contacts.lastname"应为references="Contacts.lastname"

但可以肯定的是,我可以复制该应用吗?感谢。

  • o - O - o - 编辑:

我已经编写了下一个代码(在Template.xautocomplete.helpers items中):

for item, i in (result or [])

而不是:

for item, i in result

我认为是这个错误的责任人。如果这可以解决问题,请告诉我。

  • o - O - o - Edit2:

对不起,我认为没有详细记录。您必须有一个名为' name'的字段。自动填充填充数据。这是服务器方法的一个例子:

Meteor.methods
    items: (query)->
        items.find(name: {$regex: '^.*'+query+'.*$'}).fetch()

并且在自动填充的代码中,它使用下一个方式的数据:

for item, i in (result or [])
    local_items.insert({name: item.name, index: i, remote_id: item._id})

如果您没有字段'名称'在你的收藏中,你可以做一些像:

Meteor.methods
    items: ->
        ({name: x.field} for x in items.find({}))

我认为这是问题。

PD:现在我不在家,也没有很好的Skype连接。如果问题没有解决,我们可以做到。