1

私はこれをしばらく試していましたが、動作させることができません。

私はオブジェクトを作成しています:

(function( $, window) { 

    $.widget("mobile.multiview",$.mobile.widget, {

        options: {  
            siteMap: []
            }
        });
 }) (jQuery,this);

そして、次のように文字列とイベントデータオブジェクトを入力します。

var _mainEventBindings = function () {
    var self = this;

    $(document).on("some-event", function(e, data) {
       self.options.siteMap.push( { type: "external", data: data } );
       });
 }

これは問題なく動作します。ここで、ループ内の保存されたイベントdata.toPageプロパティをチェックして、そこに保存されている文字列が現在の文字列と一致するかどうかを確認する必要があるため、2回追加することはありません。

ただし、次のように機能させることはできません。

var j = self.options.siteMap.length;
if (j == 0 ){
    alert("added entry");
    self.options.siteMap.push( { type: "external", data: data } );
    } else {
        for ( i = 0; i <= j; i++) {
            console.log("run "+i);
            console.log( self.options.siteMap);
            console.log( self.options.siteMap[i]);
            if ( data.toPage != self.options.siteMap[i]['data.toPage'] ){
                self.options.siteMap.push( { type: "external", data: data } );
                }
            }
        }

したがって、基本的には、オブジェクトに「一意の」レコードのみが含まれていることを確認したいと思います。ただし、オブジェクトに格納されているものにアクセスできないように見えるため、上記は機能しません。Firebugは、エラーやコンソールを表示することすらしません...

質問
サイトマップオブジェクトの2番目のパラメータオブジェクトのパラメータにアクセスするにはどうすればよいですか...?

手伝ってくれてありがとう!

4

2 に答える 2

1

コメントで述べられているように、ループ内=の比較から等号を削除する必要があります。for

for (var i = 0; i < j; i++) {
   ...
}

そうでなければ、ループは範囲外になります。

于 2012-05-24T09:20:23.200 に答える
0

自己を使用することは、ウィンドウに追加されるため、お勧めできません。これがあなたが達成しようとしていることの例です。

var s = {},  //create an empty object
    i, siteMap;
s.options = {};
s.options.siteMap = []; //our array

//let's add some data to siteMap array
s.options.siteMap = [{'type': "external0", 'data': 'data0'}, {'type': "external1", 'data': 'data1'}, {'type': "external2", 'data': 'data2'}];

//get the siteMap's properties' property
siteMap = s.options.siteMap;
for (i in siteMap) {
  console.log(siteMap[i].type);  //will print external0, external1 etc.
}
于 2012-05-24T09:17:21.140 に答える