【问题标题】:knockout.js - click binding argument get text of event senderknockout.js - 单击绑定参数获取事件发送者的文本
【发布时间】:2012-06-09 03:17:00
【问题描述】:

我的页面上有此链接 - 用于按首字母查找条目。我想将锚标记的文本传递到 data-bind 属性内的敲除单击事件中。这可能吗?

<a href="#" data-bind="click: $parent.getManageableEntries()><%= Convert.ToChar(i + 65)%></a></li>

// here's my javascript method in my knockout view model
function ManageEntriesViewModel() {
    var self = this;

    this.getManageableEntries = function(firstLetter) {
        // i want to pass in the text of the <a> tag as the 'firstLetter' variable
    }
}

【问题讨论】:

    标签: data-binding click knockout.js


    【解决方案1】:

    您可能应该在视图模型中将锚文本作为可观察对象。然后你只需要访问那个 observable(而不是直接访问锚元素的文本)。这为您提供了最大的灵活性。

    我做了 2 个示例,因为我不确定您是如何构建视图模型对象的。

    两者都可以正常工作: example-1 , example-2

    如果您真的想在 data-bind 属性中提取首字母,您可以在其中放置一个匿名函数,或者将您的函数与参数绑定,就像我在 this fiddle 中所做的那样。

    我希望其中一种方法能满足您的需求。

    【讨论】:

    • 这不是我正在寻找的,因为我不希望文本中的值成为我的视图模型中的内容。理想情况下,我想直接从锚元素中读取文本的值。
    • 如果您的视图中有要在代码中访问/操作的数据,但您不希望在视图模型中使用此数据,那么我认为您要查找的不是 KO功能..你可以通过点击绑定来做到这一点。 (例如,使用 jquery:fiddle
    【解决方案2】:

    我相信你现在已经找到了,莱维特,但这里就是你要找的东西......

    请参阅此处的“注 2:访问事件对象,或传递更多参数”: http://knockoutjs.com/documentation/click-binding.html

    只需通过点击绑定函数传递 add'l 参数。无论您如何渲染,请务必将第一个参数包含为 $data。

    【讨论】:

      【解决方案3】:

      这对我有用。在您不想明确地“数据绑定”到视图模型中的某些可观察对象的 HTML 标记中,将 clickchange 事件分配给 HTML 标记。然后将您的实际函数包装在一个虚拟函数中,并传入两个参数dataevent您必须同时拥有两者,否则会失败。就我而言,我使用了更改事件。见下文:

      HTML:

      &lt;input data-bind="event: { change:function(data, event) { $parent.SomeFunction(data, event) }}"&gt;&lt;/input&gt;

      然后在你的 JavaScript 函数中,你可以像这样访问&lt;input&gt; 的文本:

      JavaScript:

      function SomeFunction(data, event)
      {
          var inputValue = event.currentTarget.value;
          alert(inputValue);
      }
      

      所以每次我在&lt;input&gt; 字段中写入文本时,都会调用SomeFunction() 并提醒我刚刚写入的文本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-23
        • 2017-04-09
        • 2016-05-09
        • 2011-09-08
        • 1970-01-01
        • 2015-02-10
        • 2012-06-11
        • 1970-01-01
        相关资源
        最近更新 更多