0

サーバーからモデルまたはコレクションを取得すると、文字列化してから再解析しない限り、モデルのプロパティにアクセスできません。おそらく、モデル自体に backbone.js からの余分なオーバーヘッドがあるのでしょうか? 以下のコードでは、stringify/parse を順番に実行できることに注意してください。これにより、最初と同じ結果が得られるはずです。ただし、モデルのプロパティが以前とは異なる方法で公開されるようになったため、明らかに、これら 2 つの手順を実行することで余分な情報を削除しました。モデル プロパティにアクセスするためにこれら 2 つの手順を実行する必要はありませんよね?

Eg.  
thismodel = /// assume this came from server fetch
alert(thismodel.name);    // DOES NOT WORK - undefined

jsonmodel = JSON.stringify(thismodel);
var providerprefslistJSON = jQuery.parseJSON(jsonmodel);
alert(providerprefslistJSON.name);     // WORKS
4

2 に答える 2

1

バックボーン モデル オブジェクトは、単純な古い JavaScript オブジェクトではありません。属性は内部ハッシュに保持されます。属性にアクセスするには、次のnameいずれかを実行できます。

alert(thismodel.attributes.name);

または、get() メソッドを使用することをお勧めします。

alert(thismodel.get("name"));

モデルを JSON に変換してから再び元に戻すときに機能する理由は、内部属性 hashから JSON 文字列を作成するtoJSON() メソッドJSON.stringifyを呼び出すためです。つまり、その文字列を解析すると、プレーンな古い JavaScript オブジェクトが取得されます。バックボーン モデル オブジェクトと同じではありません。

于 2012-09-30T21:23:54.137 に答える
0

まず、モデルまたは応答のプロパティにアクセスしようとしていますか?

alert(thismodel.name)属性ではなくモデルのプロパティを求めているようです。モデル属性を探している場合は、おそらく必要ですalert(this.model.get('name'))

実際に model.name を使用する場合、基本的に問題はデータの解析方法にある可能性があります。たとえば、サーバーからの JSON が {'name':'Jimmy'} のようになっているとします。

送信されたmodel.response生の JSON には object.name の下に「Jimmy」名前空間が含まれていますが、Backbone は自動的にそれを取得し、関数を使用する別の指示 (例: modelObj.attributes.name) がない限り、それをモデル属性に変換しget()ます。

すべてがうまくいけば、かなり簡単にモデル データにアクセスできるはずです。

例: フェッチ

var model = new MyModel();
    model.id = 1;
    model.fetch({
        success: function(model, response) {
            console.log(model.get('name'));  // The model name attribute
            console.log(response.name);  // The RAW response name property
        }
    });

または、サーバーがデータを JSON データとして送り返していない可能性があります。サーバーの応答はcontent-type="application/json"

いくつかの確認事項。

于 2012-09-30T21:11:58.413 に答える