【问题标题】:How to subscribe to events without DOM modifications in cyclejs (motorcyclejs)?如何在cyclejs(motorcyclejs)中订阅没有DOM修改的事件?
【发布时间】:2016-02-04 19:11:51
【问题描述】:

如果我不想在 DOM 中产生变化,如何从某些 DOM 节点订阅事件? 我怎样才能在cyclejs或motorcyclejs中实现这样的目标?

function main({DOM}) {
   DOM.select('button').events('click').forEach(e => console.log(e))
   return {}
}

run(main, {DOM: makeDOMDriver('#app')})

更新: DOM 树在运行 main 函数之前已经退出:

<div id="app">
  <button>Click</button>
</div>

上面的例子不起作用,事件监听器没有附加到DOM节点。

【问题讨论】:

  • 什么 DOM 节点?您没有创建任何 DOM 节点来附加它。
  • 我忘记提到按钮节点已经存在于 DOM 树中
  • 我怀疑你只是不打算用这样的标记预填充根元素。我有一种强烈的感觉,这是一种不好的做法。 Cycle 可能正在寻找通过虚拟 dom 生成的东西,或者除了在根元素上调用 querySelector 之外还有其他逻辑。不过我不确定。

标签: cyclejs


【解决方案1】:

如果您希望能够查看 DOM 点击,这里应该演示您的设置应该是什么样子:

const view = () => {
  return div('app',[
    button('Click')
  ]);
};

const intent = ({DOM}) => {
  const intent$ = DOM.select('button').events('click').map(e => console.log(e));
  return intent$;
};

const main = (sources) => {
  const intent$ = intent(sources);
  const view$ = Rx.Observable.just(view);
  return {
    DOM: view$

  };
};

run(main, {DOM: makeDOMDriver('#app')})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多