【问题标题】:Meteor BlazeWhat is best practices? meteor .events vs jqueryMeteor Blaze 什么是最佳实践?流星.events vs jquery
【发布时间】:2014-11-23 13:25:40
【问题描述】:

我对 Meteor 还是很陌生...处理拖放、单击等事件的最佳做法是什么?

我了解有两种关键方式:

1) 在 Template..events 中使用“click”、“drop”等内容

 Template.someTemplate.events({

    'click .some-button': function (e) {
        e.preventDefault();
        e.stopPropagation();
        console.log("clicked");
    },

});

2) 在 Template..rendered 中,您只需使用 $(some-selector).click(.... $(something).droppable 等等等

Template.resourcePage.rendered = function(){
    this.$('.some-button').click(function (e) {
        e.preventDefault();

        console.log("clicked");       

    });
 }

所以对我来说,我想这是一回事吗?这只是一个简单的例子,同样的事情也适用于其他事件,如 drop(在 droppable() 中)。 'drop' 没有出现在受支持的 Meteor 事件的正式列表中......这是否意味着我应该使用 #2 方法。

有什么陷阱?有什么解决办法吗?

干杯

【问题讨论】:

  • 你的意思是Template.resourcePage.onRendered( function () { ..

标签: jquery meteor meteor-blaze


【解决方案1】:

当前版本的 Meteor 支持自定义事件(尽管它不在文档中)。我现在正在使用它,它就像这样工作正常:

Template.myTemplate.events({
  'customEvent #button': function(event, template) {
    // can be called with $("#button").trigger( 'customEvent', {some_data: 'some data'} );
    // You can also access data, e.g. 'some data' is accessible at event.some_data
    console.log("clicked!");
  }
});

【讨论】:

    【解决方案2】:

    Meteor 目前在其事件映射中支持以下事件:click、dblclick、focus、blur、change、mouseenter、mouseleave、mousedown、mouseup、keydown、keypress、keyup(您的选项 1)

    来源:http://docs.meteor.com/#eventmaps

    如果您想要其他事件,那么它们的最佳位置确实是呈现的事件(您的选项 2)。为按钮提供自己的模板极大地提高了可读性、测试和性能。

    【讨论】:

      【解决方案3】:

      您可能会在the Blaze wiki 中找到一些有趣的信息(向下滚动到使用 jQuery 的事件)。除此之外,事件是在 .js 文件中定义的,而不是在实际模板(HTML 文件)中定义的。如果必须,请将 jQuery 置于 HTML 文件之外并尝试使用模板助手。 简而言之,对于名为 myView 的模板中元素 #button 的单击事件,这将是代码(最佳实践):

      Template.myView.events = {
        'click #button' : function (event) {
          console.log("The button was clicked");
        }
      }
      

      这意味着您可以定义在 Template.myView.events 变量中发生的事件。当然,同一个模板可以有多个事件。您将找到要使用的事件类型in the Meteor documentation。您可以在 js 文件和 Template..events 变量中使用任何 jQuery 代码。

      【讨论】:

      • 感谢您的快速回复。我的问题应该更清楚。我没有在 HTML 中放入 jQuery,而是在 JS 文件中。似乎我提到的两种方式相似但略有不同。例如,.events 方法中的 :drop 似乎将 (events) 作为 Meteor 参数...其中 jQuery .droppable() 语句中的“drop”将 (event,ui) 作为参数,您可以执行诸如获取项目之类的操作它们被放置在可放置(例如 ui.draggable.clone)上,我在 Meteor“事件”参数中找不到它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2011-06-07
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多