当前位置: 首页 > 知识库问答 >
问题:

Knockout:无法处理可观察到的绑定

柴亦
2023-03-14

我在谷歌上搜索了一下,并试图用我找到的例子尽可能好地解决这个问题,但是唉...没有成功。

使命:

  • 打开模式,并显示用于选择已存在用户的复选框

错误:

knockout-3.4.0.debug.js:3326 Uncaught ReferenceError: Unable to process binding "with: function (){return newOrExistingPlayer }"
Message: Unable to process binding "value: function (){return selectedPersonId }"
Message: selectedPersonId is not defined

问题:

  • 在选择一个人之前,新的或现有的玩家是“未定义的”。因此,我创建了一个“teamPlayerDefault”js对象,其数据类似于api调用返回的数据(尚未实现)。这是用来初始化的

JSFiddle链接:

点击这里。。。

代码:

$(document).ready(function() {

  var NewTeamPlayerViewModel = function() {

    var teamPlayerDefault = {
      Id: 0,
      ExistingPersonId: 0,
      Email: "",
      Email2: "",
      FirstName: "",
      LastName: "",
      Address: "",
      PostalCode: "",
      PostalCity: "",
      Phone: "",
      Phone2: "",
      BirthdayString: "",
      ShirtNo: 0,
      TeamIdString: getQueryVariable("teamId")
    };

    var self = this;

    self.existingPersonChecked = ko.observable(false);

    self.existingPersons = ko.observableArray();
    self.selectedPersonId = ko.observable(null);

    self.selectedPersonId.subscribe(function(selPersonId) {
      // Handle a change here, e.g. update something on the server with Ajax.
      console.log('Valgt personid ' + selPersonId);
    });

    self.newOrExistingPlayer = ko.observable(teamPlayerDefault);

    self.setExistingPlayer = function(personId) {
      // TODO : GET EXISTING PLAYER
      self.newOrExistingPlayer(null);
      console.log(self.newOrExistingPlayer());
    }

    self.toggleExistingPersonChecked = function() {
        self.existingPersonChecked(!self.existingPersonChecked);
      }
      // TODO UGLE : Ikke hent alle personer, men ekskluder de som allerede er spillere på laget!!!
    self.initializeFromServer = function() {
      //var teamId = getQueryVariable("teamId");
      var url = 'api/User/GetAllPersons';

      $.getJSON(url)
        .done(function(data) {
          newPlayerModel.existingPersons(data);
          //console.table(data);
        });

    }
  }

  var newPlayerModel = new NewTeamPlayerViewModel();
  newPlayerModel.initializeFromServer();
  ko.applyBindings(newPlayerModel, document.getElementById("ko-player"));
  console.log("Heisann!" + newPlayerModel.newOrExistingPlayer());
});
<div id="ko-player">
    <div class="modal fade" data-bind="with: newOrExistingPlayer" id="full-modal-player" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="z-index: 999999999999">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 id="myModalLabel">Ny spiller</h4>
          </div>
          <div class="modal-body" style="height: 100% !important; max-width: 100%; height:800px">
            <div class="row">
              <div class="col-sm-12">
                <div class="col-sm-6">
                  <div class="checkbox">
                    <label class="checkbox-label">Velg eksisterende person?</label>
                    <input type="checkbox" data-bind="checked: $parent.existingPersonChecked,  click: $parent.toggleExistingPersonChecked" />
                  </div>
                </div>
                <div class="col-sm-6" style="display: none" data-bind="visible: $parent.existingPersonChecked">
                  <div class="form-group">
                    <label>Velg person:</label>
                    <select data-bind="options: $parent.existingPersons, value: selectedPersonId, optionsCaption: 'Velg en person'"></select>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Lukk</button>
            <div class="clear:both; height:1px">&nbsp;</div>
          </div>
        </div>
      </div>
    </div>
  </div>

共有1个答案

裴宜春
2023-03-14

到现在为止,你可能已经明白了这一点,但我能够用-

<select data-bind="value: $parent.selectedPersonId"></select>

只是为了扩展为什么这是,你绑定了'与'newOrExistingPlayer,并需要提高一个级别来访问你定义selectedPeople Id

 类似资料:
  • 我试图理解当我使用 在或之后,在我使用时返回true 我知道是一次性的。isDisposed()返回false。有人能解释一下到底发生了什么吗?。我理解一个写得很好的观察。create不能在onComplete()或onError()之后发出项。

  • 我正在从ViewModel中的Dialog片段更新LiveData值,但无法获取片段中的值。 视图模型: BaseViewModel: 对话框片段: 我从DialogFragment的xml文件中调用viewmodel的resendOTP(contactId:String)方法: 现在,每当我尝试从片段中调用resendOTP响应LiveData时,它都不会被调用: 所以我在这里做错了什么。 编辑

  • 问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 我试图运行Spring Cloud Sleuth并观察traceid,spantid oin日志。 我的配置如下,但当我调用requesti cnat时,会在日志中看到任何traceId或logId。 有人帮忙吗。谢谢 build.gradle Controller.java

  • 因此,我有一个NgRx选择器,它返回一个带有一系列触点的可观测值。我想映射这个流,对于每个联系人数组,映射每个联系人,并向Github发出Http请求以获取他们的配置文件图像,并将其附加到联系人对象。然而,我不知道如何做到这一点,而不以一系列的可观测数据结束。 下面是我尝试过的,但这不起作用。 下面是我收到的错误消息: 如有任何建议,将不胜感激!