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 は、セクションごとに 1 回だけ呼び出すことができます。2 番目のパラメーターを渡さない場合、セクションはページ全体になります。

これをそのようなことをしてください。

<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 に答える