<div class="ui form segment">
<div class="field">
<div class="ui selection dropdown" tabindex="0">
<div class="default text">
Select
</div>
<i class="dropdown icon"></i><input name="hidden-field" type="hidden">
<div class="menu" tabindex="-1">
<div class="item" data-value="1">
Choice 1
</div>
<div class="item" data-value="2">
Choice 2
</div>
</div>
</div>
</div>
</div>此代码是在template.hbs(车把)文件中编写的。我想用下面的命令初始化下拉列表
$('.ui.dropdown')
.dropdown();我在哪里可以写第二段代码?如果是html/php文件,我可以在模板中编写
发布于 2018-11-05 09:26:51
简短的回答,你没有。
长篇大论的回答:如果你是一个对自己的工作感到自豪的开发人员,并且不希望下一个维护人员幻想把你淹死在脏兮兮的马桶里,你应该创建一个下拉组件。这个组件的作用范围似乎很小,看起来如下所示:
{{dropdown-list options=listOfOptions onOptionSelect=(action "someAction")}}如果输入选项,则转换为:
<div class="menu" tabindex="-1">
<div class="item" data-value="1">
Choice 1
</div>
<div class="item" data-value="2">
Choice 2
</div>
</div>至:
<div class="menu" tabindex="-1">
#{{each options as |option|}}
<div class="item" data-value="{{option.value}}">
option.displayName
</div>
{{/each}}
</div>其中每个选项都是[{displayName: "Option 1", value: 1}...]
在组件的javascript部分中,只需在文档描述的didInsertElement中执行上述代码:
在组件成功地将其支持的HTML元素呈现到DOM之后,它将触发其didInsertElement()钩子。
最后,在组件内部,将侦听器绑定到下拉本地事件。其中一个函数,用于下拉列表的select操作,应该调用this.onOptionSelect(whateverTheSelectedValueIs)。这允许您为每个下拉列表定义不同的操作。
我强烈建议你花点时间读一下这个文档的部分
编写Ember需要一种不同于编写后端呈现的html + jquery风格的应用程序的思维方式。您希望尽可能地将javascript代码从DOM中分离出来,并将重点放在值+数据向下/向上的操作上。组件是绑定到本机javascript事件并与第三方插件集成的正确位置。这样做可以有效地隔离DOM交互,并为应用程序的其他部分提供更好的api。如果您只是使用路由renderTemplate钩子来执行.dropdown()调用,那么您要求每个开发人员记住在任何时候调用下拉列表,并且对可重用性完全没有做过任何事情,只是黑掉了您的解决方案。不要做那种人,做对的事:)
https://stackoverflow.com/questions/53149734
复制相似问题