2016-04-22 9 views
1

オブジェクトのシナリオです:アクセスプロパティは、ここで

私は現在、次のようなオブジェクトを持っている:

enter image description here

modal.PersonInfoを実行した後、私は、オブジェクトがから始まる返さ取得上記の画像を参照してください。

質問:私のHTML内、どのように私はエラー状態FirstNameLastName

呼び出すことができます。JavaScriptの

Uncaught ReferenceError: Unable to process binding "text: function(){return PersonInfo().FirstName}" Message PersonInfo is not defined

function Person() { 
    var modal = this; 
    modal.PersonInfo = ko.observable(''); 

    modal.setData = function (id) { 
     $.ajax({ 
      type: "GET", 
      url: '/Person/UserInformation?id=' + id, 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       modal.setPersonInfo(data); 

       $('#person-modal').modal('show'); 
      } 
     }); 

     modal.setPersonInfo = function (data) { 
      modal.PersonInfo = data; 
     } 
    } 
}; 

HTML 私の考えは、私は次の操作を行うことができることだった:

<p data-bind="text: PersonInfo().FirstName"></p> 
<p data-bind="text: PersonInfo().LastName"></p> 
+0

あなたは 'applyBindings'をどのように呼びますか?また、 'setPersonInfo'は' observable'を普通のjavascriptオブジェクトに置き換えます。 'ko.mapping.fromJS()'のようなものを使用して、それを観測可能に保つ必要があります。 –

答えて

2

この行は、代わりに値を割り当てる、に観察を置き換える:

modal.PersonInfo = data; 

は、代わりにこれを試してみてください:

modal.PersonInfo(data) 

見当違いの終値もありますbrエース:working demoを参照してくださいmodel.setPersonInfomodel.setData

ました。

+0

助けてくれてありがとう。しかし、私のHTMLはまだ失敗します... PersonInfoは存在しません。何か案は? – ChaseHardin

+0

'data'の出力を表示できますか? – Neps

+0

確かに、 'data'デバッグと入力中に、私はこれを取得します:' Object {FirstName: "Frankie"、LastName: "Jones"、Age:55} ' – ChaseHardin

1

あなただけのインスタンスko.mappingのために、マッピングのいくつかの種類を使用する必要があります。あなたのビューモデルをバインドして、何らかの方法で関数を起動してください。そうすればOKです。

var DemoPage = (function() { 
 
    function DemoPage() { 
 
    \t var _this = this; 
 
     _this.PersonInfo = ko.observable({}); 
 
     _this.setData = function (id) { 
 
      // some ajax that returns data 
 
      var _data = { 
 
      \t FirstName: 'Frankie', 
 
       LastName: 'Jones' 
 
      }; 
 
      _this.setPersonInfo(_data); 
 
      //$('#person-modal').modal('show'); 
 
    \t }; 
 
     \t _this.setPersonInfo = function (data) { 
 
      ko.mapping.fromJS(data, {}, _this.PersonInfo()); 
 
     \t }; 
 
     
 
    \t this.setData(); 
 
    } 
 
    return DemoPage; 
 
})(); 
 

 
var demoApp = new DemoPage(); 
 

 
ko.applyBindings(demoApp);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script> 
 

 
<p data-bind="text: PersonInfo().FirstName"></p> 
 
<p data-bind="text: PersonInfo().LastName"></p>

+0

助けてくれてありがとうが、これはコードを書いたまったく異なる方法をとっている。私の問題を解決するために書いたコードを変更する簡単な方法はありますか? – ChaseHardin

+0

あなたは何が違うのかはっきりしていませんが、少し違う命名規則を持つあなたのコードです。コードに含まれていない唯一の変更は、KOバインディングの初期化です。データ値を置き換える代わりに、 'ko.mapping.fromJS(data、{}、_this.PersonInfo())のマッピングを行うか、 ;または 'this.PersonInfo(data)'だけです。ここでマッピングを使用する利点を知ることができます。http://knockoutjs.com/documentation/plugins-mapping.html – kasperoo

関連する問題