首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在使用“绑定”时无法在输入字段中看到数据?

为什么在使用“绑定”时无法在输入字段中看到数据?
EN

Stack Overflow用户
提问于 2017-04-20 08:29:34
回答 1查看 38关注 0票数 0

我想要创建一个动态对话框。为此,我需要一些数据,如标题、内容和视图模型。标题和内容将显示。但是视图模型没有正确绑定。为了了解问题所在,我在first_name中预先填充了“foo”。但应该是“我的名字”。

为了使模态对话框动态化,我们有一个必须用特定数据填充的modalDialog对象。openDialog函数填充这些数据并打开它。

正常情况下,动态部件将被需求加载。为了证明这个问题,我在这里使它变得容易多了。

在这里,html代码:

代码语言:javascript
复制
<!-- the dynamic modal dialog -->
<div id="modal-dialog" class="modal fade" role="dialog" data-backdrop="static" data-bind="css: modalDialog.classes">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-bind="click: modalDialog.close">&times;</button>
        <h4 class="modal-title" data-bind="html: modalDialog.title"></h4>
      </div>

      <div data-bind="with: modalDialog.viewModel">
        <div class="modal-body" data-bind="html: $parent.modalDialog.content"></div>
      </div>
      <div class="modal-footer" data-bind="foreach: modalDialog.buttons">
        <button type="button" class="btn btn-primary" data-bind="click: action, text: label"></button>
      </div>
    </div>

  </div>
</div>

<!-- Test button for open the dialog -->
<button type="button" class="btn btn-info" data-bind="click: testDialog">Open modal</button>

在这里,模态对话框视图模型的javascript代码:

代码语言:javascript
复制
// the main viewmodel
var appVM = {
  modalDialog:
  {
    title: ko.observable(''),
    content: ko.observable(''),
    viewModel: ko.observable(this),
    buttons: ko.observableArray([]),
    classes: ko.observable(''),
    open: function()
    {
      $("#modal-dialog").modal('show');
    },
    close: function()
    {
      $("#modal-dialog").modal('hide');
    }
  },
  openDialog: function(title, content, viewModel, buttons, classes)
  {
    if (!viewModel)
      viewModel = appVM;
    if (!buttons)
      buttons = [{action: appVM.modalDialog.close, label: 'Close'}];
    if (!classes)
      classes = '';

    appVM.modalDialog.title(title);
    appVM.modalDialog.content(content);
    appVM.modalDialog.buttons(buttons);
    appVM.modalDialog.classes(classes);
    appVM.modalDialog.viewModel(viewModel);
    appVM.modalDialog.open();
  },
  testDialog: function()
  {
    var vm = new userViewModel();
    var title = 'Test Title';
    var html = dialogContent;
    var buttons = [
      { action: vm.onSave, label: 'Apply' },
      { action: appVM.modalDialog.close, label: 'Cancel' }
    ];

    appVM.openDialog(title, html, vm, buttons);
  }
};
ko.applyBindings(appVM);

至少动态数据的代码:

代码语言:javascript
复制
// the user data
function User(data)
{
  var self = this;
  self.first_name = ko.observable(data.first_name).extend({required: true});
  self.last_name = ko.observable(data.last_name).extend({required: true});
}

// the user viewmodel
function userViewModel()
{
  var self = this;
  self.user = ko.observable(new User(
  {
    first_name: 'my first name', 
    last_name: 'my last name'
  }));
  self.onSave = function()
  {
    alert('save data');
  };
}

// The loaded content for the dialog
var dialogContent = ' \
<div class="clearfix"> \
  <div class="col-xs-12"> \
    <div class="row form-group"> \
      <label class="col-xs-12 col-sm-4 col-md-3">Vorname:</label> \
      <input class="col-xs-12 col-sm-8 col-md-9" type="text" data-bind="textInput: user().first_name" title="" value="foo"/> \
    </div> \
    <div class="row form-group"> \
      <label class="col-xs-12 col-sm-4 col-md-3">Nachname:</label> \
      <input class="col-xs-12 col-sm-8 col-md-9" type="text" data-bind="textInput: user().last_name" title=""/> \
    </div> \
  </div> \
</div> \
';

你可以在这里试试:http://jsfiddle.net/p8zbfw65/

更新

从罗伊的提示,它的工作与预期。我插入了boundHtml绑定

代码语言:javascript
复制
ko.bindingHandlers.boundHtml = {
    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        const contentHtml = ko.unwrap(valueAccessor());

        element.innerHTML = contentHtml;
        ko.applyBindingsToDescendants(bindingContext, element)
    }
};

并更改了html: $parent.modalDialog.content

转到boundHtml: $parent.modalDialog.content

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 12:30:52

html绑定插入HTML,但不对其应用绑定。为此,您将需要一个自定义绑定处理程序。我写了一个简单的here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43514177

复制
相关文章

相似问题

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