我正在尝试实现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)
我想这是数据上下文范围的问题,但我不知道它来自哪里。
谢谢!
答案 0 :(得分:0)
我不确定,但初看时我认为references="contacts.lastname"
应为references="Contacts.lastname"
。
但可以肯定的是,我可以复制该应用吗?感谢。
我已经编写了下一个代码(在Template.xautocomplete.helpers
items
中):
for item, i in (result or [])
而不是:
for item, i in result
我认为是这个错误的责任人。如果这可以解决问题,请告诉我。
对不起,我认为没有详细记录。您必须有一个名为' 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连接。如果问题没有解决,我们可以做到。