2

ノックアウトとコーヒースクリプトでシンプルなアプリを維持したい。次のような Json オブジェクトの配列を追加したい:

[
    {
        Name = "",
        Subscribe = "",
        ScrollOfDish = [0]
    },
    {
        Name = "",
        Subscribe = "",
        ScrollOfDish = [0]
    }
]

これが私のコードです:

class Complex
        constructor: ()->
            @ComplexItems = ko.observableArray()
            @getAllComplex()
        self = this

        getAllComplex:()->
            $.ajax
                type: "POST"
                url: "/Complex/GetAllComplex"
                data: {}
                dataType:"json"
                contentType:"json"
                success:(res)->
                        self.ComplexItems res // here is the problem


    $(document).ready ()->
        window.model = new Complex()
        ko.applyBindings(model)

しかし、uncouched type error ComplexItems is not a function という問題があります。もちろん、私は逆を試してみself.ComplexItemsましmodel.ComplexItemsたが、うまくいきませんでしたが、私の例がうまくいかない理由を理解したいと思います。

4

2 に答える 2

0

:最初に、JSON を修正しての代わりに使用する必要があります=。次のように、コンマや中括弧を削除できます。

[
  Name: ''
  Subscribe: ''
  ScrollOfDish: [0]
,
  Name: ''
  Subscribe: ''
  ScrollOfDish: [0]
]

ビュー モデル コードの作業バージョンを次に示します。

$ ->

  class Complex
    constructor: ->
      @complexItems = ko.observableArray()
      @getAllComplex()

    getAllComplex: ->
      $.ajax
        type: 'POST'
        url: '/Complex/GetAllComplex'
        data: {}
        dataType: 'json'
        contentType: 'json'
        success: (res) =>
          @complexItems res

  window.model = new Complex()
  ko.applyBindings model

太い矢印を使用して右=>にバインドするだけです。私が行ったいくつかのスタイル上の変更があります。complexItemsthis

  1. ->の代わりに使用() ->
  2. @の代わりに使用this
  3. 変数名にはキャメルケースを使用 ( complexItems)
  4. 補間されていない文字列には一重引用符を使用します
  5. $ ->の代わりに使用$(document).ready ->

このスタイルガイドを読むことをお勧めします。

于 2012-11-08T01:15:04.800 に答える
0

あなたself = thisは間違った場所にいます..現在、「自己」がコンストラクター関数を指すようにしています(クラスのインスタンスではなく..)。次のようにする必要があります。

class Complex
    constructor: ()->
        @ComplexItems = ko.observableArray()
        @getAllComplex()        

    getAllComplex:()->
        self = this    
        $.ajax
            type: "POST"
            url: "/Complex/GetAllComplex"
            data: {}
            dataType:"json"
            contentType:"json"
            success:(res)->
                    self.ComplexItems res


$(document).ready ()->
    window.model = new Complex()
    ko.applyBindings(model)
于 2012-11-08T00:20:06.723 に答える