首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KnockoutJs和自定义bindingHandlers

KnockoutJs和自定义bindingHandlers
EN

Stack Overflow用户
提问于 2012-12-12 22:08:15
回答 1查看 494关注 0票数 3

我的模特长得像这样

代码语言:javascript
复制
var model function(json) {
    var self = this;

    self.Editing = ko.observable();
    self.Edit = function(item) {
        item.beginEdit();
        self.Editing(item);
    }
    self.Save = function(item) {
       item().commit();
       self.Editing(null);
    }
    self.Cancel = function(item) {
       item().rollback();
       self.Editing(null);
    }

    ko.mapping.fromJS(json, {}, this);
}

我还为jquery-ui提供了一些自定义绑定。

代码语言:javascript
复制
ko.bindingHandlers.jqDialog = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
    var options = $.extend(
             {}, 
             allBindingsAccessor().dialogOptions, 
             { autoOpen: false, modal: true, width: 'auto' });

    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
        $(element).dialog("destroy");
    });

    $(element)
        .dialog(options)
        .children('form:first')
        .ajaxForm({ configure ajax call });
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
    var value = ko.utils.unwrapObservable(valueAccessor());
    if (value === null) {
        $(element).dialog('close');
    }
    else {
        var title = $(element).data('title') + ' - ' + value.Title;
        $(element).dialog('option', 'title', title).dialog('open');
    }
}
};

最后我的模板

代码语言:javascript
复制
...standard binding that works...
...foreach template binding that works...
<div data-bind="with: Editing, jqDialog: Editing" data-title="Edit">
  <form method="put" action="/api/Item" data-bind="submit: $parent.Save">
    <input type="hidden" name="Id" data-bind="value: Id" />
    <div>
      <label>Enter the Value</label>
      <input name="thevalue" data-bind="value: thevalue" />
    </div>
    <input type="submit" value="Save" data-bind="jqButton: {}" />
    <a href="#" data-bind="click: $parent.Cancel, jqButton: {}">Cancel</a>
  </form>
</div>

问题:使用绑定,对话框将出现,但输入和按钮丢失。它基本上是一个空对话框,带有适当的标题。

如果我将绑定更改为data-bind="with: Editing",数据将正确绑定到标记,但我会丢失对话框。我假设问题出在jqDialog的处理程序中,但我不确定要使它工作缺少什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-13 02:14:36

我的猜测是,这是可行的(见我在评论中的可能解释):

代码语言:javascript
复制
<!--ko with: Editing-->
  <div data-bind="jqDialog: $data" data-title="Edit">
    ...
  </div>
<!--/ko-->
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13849525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档