-1

在 div 中有一个数据绑定 onClick,如下所示:

data-bind='click: $root.addTable'

是否可以在调用点击之前运行一些 javascript 并且如果它满足特定条件不调用点击?

就像是 ?:

<div id="onThisClick" data-bind='click: $root.addTable'></div>

$("#onThisClick").delegate("#all", "click", function() {
if(isTrue){
}
else {
 //run data binding as normal
}
}

我正在执行一些验证,需要将一个值传递给调用的 javascript 函数。

4

3 回答 3

2

为什么不只检查被调用的方法呢?

<div class="button" data-bind="click: $root.addTable">Click</div>

// in javascript
function RootViewModel() {
    this.addTable = function() {
        if(!condition) {
            return; 
        }
        // jumps out when a condition is met

        // do what you're supposed to do here
    }
}

无需将其复杂化,而不仅仅是条件和回报。


编辑:如果您已经在使用 jQuery,那么使用 jQuery 从 HTML 中获取值很容易。这是一个使用隐藏字段的示例(您可以使用以下命令检索它val()

<input type="hidden" id="myvalue" value="true"></input>

// in javascript code, select the element by it's id
if ($("#myvalue").val()) return;

// plain vanilla JS is a bit more verbose
if (document.getElementById("myvalue").value === "true") return;

你可以用这个 jsfiddle 来玩这个想法。

于 2013-03-08T20:11:14.653 回答
0

我假设您的问题是您已经调用了定义的函数,$root但您想访问$data(绑定时的视图模型)的属性。Knockout 使用该apply()方法调用绑定函数,并将您当前的视图模型作为第一个参数传递。所以你在你的函数中$data是可用的(当它通过点击事件调用时)。this

于 2013-03-09T03:20:22.697 回答
-1

我听说过knockoutJS,我有兴趣了解它,但在这个例子中,它对你没有任何好处。另一方面,jQuery:

$(function() {
    $root = $("#root");
    $root.addTable = function() {
        $root.html("Hooray!");
    };

    $("#onThisClick").on("click", function() {
       $root.html("");
       if($("#theText").val().match(/sad/)){
           alert("Must not be sad to see table!");
       }
       else {
          $root.addTable();
       }
   });

});

似乎工作得很好。您需要传递给的任何值addTable()都可以使用您的其他 HTML5data属性毫无问题地访问。 检查小提琴,并分叉它以使其适合您

于 2013-03-08T20:02:42.200 回答