Meteor JS自动表单自定义输入-没有当前视图
Meteor JS Autoform Custom Input - There is no current view
我正在创建自己的自定义输入类型,用于在Metroet js中进行自动变形。一切都正常工作,但我在浏览器控制台中遇到了一个奇怪的错误。这个自定义输入是一个引导下拉列表多复选框,有可能嵌套在其他引导下拉列表中。当您选中下拉列表中的任何字段时,都会发生错误。
Uncaught Error: There is no current view
Blaze._getCurrentView
Blaze.getView
AutoForm.templateInstanceForForm
_validateField
_.throttle.later
这是我的咖啡文件,用于自定义输入。
AutoForm.addInputType "dropdownMultiCheckbox",
template: "afDropdownMultiCheckbox"
valueOut: () ->
grabInput = $(@).children().children('input:checked')
holder = []
grabInput.each ->
holder.push $(@).val()
if $(grabInput[0]).hasClass('all-selector')
holder.shift()
holder
SimpleSchema.messages
'atLeastOne': 'You need to select at least one field'
Template.afDropdownMultiCheckbox.helpers
options: ->
options = @.selectOptions
options
dsk: () ->
@.atts["data-schema-key"]
Template.afDropdownMultiCheckbox.events
'click div.dropdown-toggle': (event) ->
$(event.target).siblings("ul.dropdown-menu").toggle()
'click .all-selector': (event) ->
if event.target.checked
$(event.target).parent().siblings().children(".checkbox-options").prop('checked',true)
else
$(event.target).parent().siblings().children(".checkbox-options").prop('checked',false)
'click .checkbox-options': (event,templateInstance) ->
if !(event.target.checked)
$(event.target).parent().siblings().children(".all-selector").prop('checked',false)
if $(".check-onclick-#{@.class}:checked").length == $(".check-onclick-#{@.class}").length
$("#checkbox-all-#{templateInstance.data.atts.id}").prop('checked',true)
'click div.btn.btn-default.dropdown-toggle,ul,ul *': (event) ->
event.stopPropagation()
Template.afDropdownMultiCheckbox.rendered = ->
instanceOfTemplate = @
$("*").on "click", (event) ->
if !($(event.target)[0] == $(".class-#{instanceOfTemplate.data.atts.id}")[0] ||
$(event.target)[0] == $("##{instanceOfTemplate.data.atts.id}")[0] ||
$(event.target).hasClass("close-dropdown-multi"))
$(".class-#{instanceOfTemplate.data.atts.id}").hide()
下面的玉文件:
template(name="afDropdownMultiCheckbox")
.dropdown
.btn.btn-default.dropdown-toggle(type="button", id="{{atts.id}}", aria-expanded="false")
| {{atts.buttonText}}
span.caret
ul.dropdown-menu(role="menu", aria-labelledby="{{atts.id}}",class="class-{{atts.id}}")
form
div(data-schema-key="{{dsk}}")
if atts.allOption.presence
li.close-dropdown-multi(role="presentation")
input.all-selector.close-dropdown-multi(type="checkbox", value="{{atts.allOption.value}}", id="checkbox-all-{{atts.id}}", role="menuItem")
label.close-dropdown-multi(for="checkbox-all-{{atts.id}}") {{atts.allOption.value}}
+each options
li.close-dropdown-multi(role="presentation")
input.close-dropdown-multi.checkbox-options(class="check-onclick-#{this.class}", role="menuItem", type="checkbox", value="#{this.text}", id="checkbox-#{this.text}")
label.close-dropdown-multi(for="checkbox-#{this.text}") {{this.text}}
br
我使用的架构文件:
categories:
type: [String]
optional: false
custom: ->
if this.value.length == 0
'atLeastOne'
autoform:
buttonText: 'Categories'
label: false
id: 'dropdown-nr-1'
options: -> _.map CampaignCategories, (arg1) ->
option =
text: t "campaign.categories.#{arg1}"
class: 'dropdown-vol-1'
allOption:
presence: false
value: 'All'
afFieldInput:
type: 'dropdownMultiCheckbox'
locations:
type: [String]
optional: false
custom: ->
if this.length == 0
'atLeastOne'
autoform:
buttonText: 'Locations'
label: false
id: 'dropdown-nr-2'
allOption:
presence: true
value: 'All'
options: -> _.map CampaignLocations, (arg1) ->
option =
text: t "campaign.locations.#{arg1}"
class: 'dropdown-vol-2'
afFieldInput:
type: 'dropdownMultiCheckbox'
编辑:
错误是由用于流星应用程序中i18n的架构中的CampaignLocations数组引起的。它是全局变量,也许在某种程度上它正在改变流星上下文(和这个值),因为它加载了当前模板之外的变量。如果我返回如下静态值:
[{text: 'test',class: 'test'},{text: 'test',class: 'test'},{text: 'test',class: 'test'}]
一切都很好,没有错误。
我解决了这个问题。问题很简单,但"感谢"javascript(和流星)显示错误的方式,我没有注意到我试图在表单中嵌套表单,这就是为什么出现"未捕获错误:没有当前视图"的原因。
让我完全措手不及的是,当我的镀铬控制台出现错误的那一刻。Meteor在使用自动表单和在表单标签内嵌套表单标签时不会抱怨错误,因为"选项"属性是用像这样的静态数据生成的
[{text: 'test',class: 'test'},{text: 'test',class: 'test'},{text: 'test',class: 'test'}]
但是,如果您将在options属性中使用例如这种代码:
options: -> _.map CampaignLocations, (arg1) ->
option =
text: t "campaign.locations.#{arg1}"
class: 'dropdown-vol-2'
如果是使用插值或字符串串接,Meteor将抛出错误。
相关文章:
- 如何在视图中保存用户输入内容,并在离开页面时对控制器进行后期调用
- Meteor JS自动表单自定义输入-没有当前视图
- 角度:当输入更改时更新视图 + .this/$scope
- 如何在Android网络视图中完全禁用所有输入的软键盘
- 输入视图端口时更改时间轴css
- 添加在动态网格视图中输入的值
- 网格视图在我输入特定记录名称时不显示记录
- 由代码操作输入时不触发主干视图更改事件
- Navicat :制作视图,每次输入时都可以更新某些字段
- 禁用视图中的按钮,直到在字段中输入值
- 第二次点击后,iOS 网络视图中的文本输入不起作用
- DurandalJs:一种通用解决方案,用于将焦点放在组合视图上的第一个输入元素上
- Angular JS-记住视图更改时的视图输入内容
- 在backbonejs视图中,keypress/keyup/keydown事件是否仅适用于输入,而不适用于其他元素
- 如何在输入字段中显示文本”;密码”;键入后,再次切换到密码视图
- TagName输入未显示在我的成员视图中
- 防止<输入/>在视线之外,在选择()(或聚焦)时将页面滚动到视图中
- AngularJS-转换输入值并使视图反映所做的更改
- 如何从输入字段中获取值并将其分配给视图模型中的JavaScript对象
- todo的一个简单应用程序,不向视图添加输入值