Knockout.js Knockout js使用Knockout安全绑定在click数据绑定中传递参数

Knockout.js Knockout js使用Knockout安全绑定在click数据绑定中传递参数,knockout.js,Knockout.js,我尝试在我的knockout js上实现ksb,但是在onClick绑定中传递参数时会导致错误 我用了这句话: <button type="button" data-bind="click: btnClick.bind($data, '1')">button</button> 按钮 它将抛出一个错误: Uncaught #<Object> knockout-secure-binding.js: 440 Uncaught#knockout-secure-b

我尝试在我的knockout js上实现ksb,但是在onClick绑定中传递参数时会导致错误

我用了这句话:

<button type="button" data-bind="click: btnClick.bind($data, '1')">button</button>
按钮
它将抛出一个错误:

Uncaught #<Object> knockout-secure-binding.js: 440
Uncaught#knockout-secure-binding.js:440
如何在onClick绑定上传递param?

说明(特别注意#3,粗体添加):

绑定中的KSB中使用的语言是JSON的超集,但不是 Javascript的子集。例如,我将称之为sbind语言 方便

Sbind语言比Javascript更接近于JSON,因此更容易理解 通过将其与JSON进行比较来描述其差异。斯宾德语 与JSON的不同之处在于:

  • 它理解
    未定义的
    关键字
  • 它在
    $data
    $context
    或globals(按该顺序)上查找变量
  • 可以调用函数(但不接受参数)
  • 调用顶级函数时,将
    this
    设置为具有以下键的对象:
    $data
    $context
    ,globals,
    $element
    ,对应 到相应元素绑定的状态
  • 要绕过此限制,可以使用自定义绑定处理程序包装其他自定义绑定处理程序,并为它们提供绑定函数

    ko.bindingHandlers.curry = {
        unwrap: function (valueAccessor, data) {
            var val = valueAccessor(),
                theFunction = data[val[1].token];
            return {
                bh: ko.bindingHandlers[val[0]],
                fnVa: function () {
                    return theFunction.apply.bind(theFunction, theFunction, val.slice(2));
                }
            };
        },
        init: function (element, valueAccessor, allBindingsAccessor, data, context) {
            var spec = ko.bindingHandlers.curry.unwrap(valueAccessor, data),
                init = spec.bh.init;
            if (init) {
                init(element, spec.fnVa, allBindingsAccessor, data, context);
            }
        },
        update: function (element, valueAccessor, allBindingsAccessor, data, context) {
            var spec = ko.bindingHandlers.curry.unwrap(valueAccessor, data),
                update = spec.bh.update;
            if (update) {
                update(element, spec.fnVa, allBindingsAccessor, data, context);
            }
        }
    };
    
    像这样使用它:

    <button type="button" data-bind="curry:['click', btnClick, '1', '2']">short</button>
    
    short
    

    .

    不!这种情况不应该发生,请检查这里的样品。任何你能复制它的机会都可能与
    knockout secure binding.js
    有关。是的,没有knockout secure binding它就不会有问题。但遗憾的是,出于安全原因,我正在实施它。我想传递参数来优化我的点击绑定@supercolany chance的使用?可以用小提琴复制你的案例。我可以进一步帮助你,因为事情在上面的小提琴顺利你需要保留一些东西来显示你的问题。或者,您甚至可以使用
    click:function(){btnClick('1')}
    @supercool这里有一把小提琴来演示这个问题。完全正确这里的参考讨论