2016-10-26 3 views
0

私のビューに観測可能な配列コレクションの合計長さを表示する方法については助けが必要です。試してみると常に結果はゼロです。以下はサンプルです。 MyVM.jsはここ強く型付けされた観察可能なKnockout.jsの配列のアイテムの総数を取得

//Model 
var Course = function (data) { 
    var self = this; 
    self.title = ko.observable(data.Title); 
    self.creditHour = ko.observable(data.CreditHour); 
self.result = ko.observableArray(data.result); 
    return self; 
} 
//View Model 
var CourseList = function() { 
    var self = this; 

    self.courses = ko.observableArray([]); 

    $.ajax({ 
     type: "GET", 
     url: '/Student/Register_For_Courses', 
     contentType: "application/json; charset=utf-8", 
     datatype: 'json', 
     traditional: true, 
     success: function (data) { 
      ko.utils.arrayForEach(data, function (data) { 
       self.courses.push(new Course(data))   
      }); 

     }, 
     error: function (err) { 
      alert(err.status + " : " + err.statusText); 
     } 

    }); 

    //Get total of array collection 
    tHour = self.courses().length; 
    // button functions 
    removeCourse = function (course) { self.courses.remove(course); } 


} 

$(document).ready(function() { 
    ko.applyBindings(new CourseList()); 
}); 

ファイル

<tr> 
    Total CH<td data-bind="text:tHour"></td> 
</tr> 

問題はtHourではなく、配列の期待長さの0を返しているということである私の見解です。

+0

*「厳密に型付けされた観察可能なアイテムの配列をknockoujsで取得する」「強く型付けされている」という意味が不明です。これはJavaScriptです。何も厳密にタイプされていません。 –

答えて

2

つのオプション:

  1. のいずれかを使用しcourses().length

    self.tHour = ko.pureComputed(function() { 
        return self.courses().length; 
    }); 
    

:計算

<td data-bind="text: courses().length"></td> 
  • 使用3210

    サイドノート:あなたのテンプレートは無効です。 Total CHtrに直接入れることはできません(例:tdまたはthの内部にはありません)。

    注釈2:お客様のtHourimplicit globalでした。 あなたはself.tHour = ...を意味しました。

    これは私の貧血の小さなブログの投稿です。

  • 関連する問題