0

即使这是主要问题,即使经过多次尝试,我也无法解决。(但我是这个领域的新手)

我需要的是我有 2 个单独的 java 脚本文件,我想从它们中绑定。

     <table style="width: 100%;">
            <tr>
                 <td class="auto-style1">Time For Work: </td> 
                 <td><input id="Text2" type="text" data-bind="value: TimeForWork" /></td> 
            </tr>
            <tr>
                 <td class="auto-style1">Rest </td> 
                 <td><input id="Text4" type="text" data-bind="value: Rest" /></td> 
            </tr>
     <td class="auto-style1">Project Code </td> 
                 <td ><select id="Select1" data-bind='options: Projects' style="width: 312px"></select>
                       <button data-bind="click: AddProjects">Cancel</button>
                 </td> 
                 <td><input id="Text6" type="text" data-bind="value:Test" />
      </table>

  <script src="Scripts/TimeRecord.js"></script>
  <script src="Scripts/ProjectDetail.js"></script>

我的 Java 脚本:TimeRecord.js

var ViewModel = {
    CheckIn: ko.observable(),
    CheckOut: ko.observable(),
    Lunch: ko.observable(),
    Rest: ko.observable(),
    WorkOnProject: ko.observable(),
    //Projects: ko.observableArray()
};


ViewModel.TimeForWork = ko.dependentObservable(function () {
    return ViewModel.CheckIn() ? ViewModel.CheckOut() ? parseFloat(this.Lunch()) ? parseFloat(this.CheckOut()) - parseFloat(this.CheckIn()) - parseFloat(this.Lunch()) : parseFloat(this.CheckOut()) - parseFloat(this.CheckIn()) : 0 : 0;
}, ViewModel);

ViewModel.RemainHour = ko.dependentObservable(function () {
    return ViewModel.TimeForWork() ? ViewModel.Rest() ? ViewModel.WorkOnProject() ? parseFloat(this.TimeForWork()) - parseFloat(this.Rest()) - parseFloat(this.WorkOnProject()) : parseFloat(this.TimeForWork()) - parseFloat(this.Rest()) : parseFloat(this.TimeForWork()) : 0
}, ViewModel);

ProjectDetail.js

var projectLine = function () {
    var self = this;
    //self.RemainHour = ko.observable();
    self.Test = "abc";
    self.Projects = ko.observableArray();

    self.AddProjects = function () {
        alert('abc');
    }
}
ko.applyBindings(new projectLine());

在这里 TimeRecord.js 值按我的预期绑定。但 ProjectDetail 值不具有约束力。甚至 self.Test 值也不显示。我做错了什么?

4

2 回答 2

0

在这种情况下可以创建另一个视图模型并使用该视图模型可以访问其他视图模型功能。

var ModelHome={
    TimeRecord:ViewModel ,
    Project :projectLine ,

};

ko.applyBindings(ModelHome);
于 2014-12-18T18:07:19.247 回答
0

ko.applyBindings 每个部分只能调用一次。如果您不传递第二个参数,则该部分是整个页面。

做这样的事情。

<div id="one">
  <input data-bind="value: name" />
</div>

<div id="two">
  <input data-bind="value: name" />
</div>

<script type="text/javascript">
  var viewModelA = {
     name: ko.observable("Anurag")
  };

  var viewModelB = {
     name: ko.observable("Chaurasia")
  };

  ko.applyBindings(viewModelA, document.getElementById("one"));
  ko.applyBindings(viewModelB, document.getElementById("two"));
</script>

那可能对你有帮助。

于 2013-07-03T07:54:36.017 回答