1

Kendo mobile を使い始めたばかりです (これまでのところ感銘を受けました - JQM から来ました)。いくつかの json (その地域の近くの家) を返す URL に郵便番号を渡してから、Datasource を使用してリストビューに追加しようとしています。ただし、コンソールで失敗します:

Error [object Object] 

Heres 私のコード: ** 更新済み **

var app = new kendo.mobile.Application(document.body, 
{
    transition:'slide'
});

function onBodyLoad() {
    //document.addEventListener("deviceready", onDeviceReady, false);
    // Use the following for testing in the browser
    getProperties(onResult);
}


function getProperties(callback) {

    var template = kendo.template($("#propertiesListViewTemplate").html());

    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {

                url: 'http://www.someurl.me/getproperties.php?postcode=hx59ay',
                dataType: "jsonp"
            }
        },

        schema: {
            data: "listing" //??? Not sure what this should be???
        },


        error: function(e) {
            console.log("Error " + e);
        },
        change: function() {
            $("#propertyResultListView").html(kendo.render(template, this.view()));
            console.log(this.view());
        }
    });
    dataSource.read();
    $("#propertyResultListView").kendoMobileListView({dataSource:dataSource,template: $("#propertiesListViewTemplate").html()});

}

function onResult(resultData) {
    console.log("Results " + listing);
    $("#propertyResultListView").kendoMobileListView({dataSource: kendo.data.DataSource.create({data:resultData}),
        template: $("#propertiesListViewTemplate").html()});
}

これはデータソースのスキーマ部分にあると確信していますが、それがどうあるべきかについてはわかりません(ドキュメントは実際には役に立ちませんでした)。

返される JSON は次のとおりです。

{"country":"England","result_count":510,"longitude":-1.826866,"area_name":"Caldercroft, Elland HX5","listing":[{"image_caption":"Main Image","status":"for_sale","num_floors":"0","listing_status":"sale","num_bedrooms":"2","agent_name":"Daniel & Hirst","latitude":53.688934,"agent_address":"110 Commercial Street","num_recepts":"0","property_type":"Detached","country":"England","longitude":-1.843375,"first_published_date":"2012-10-11 19:05:42","displayable_address":"Elland HX5","street_name":"EXLEY LANE","num_bathrooms":"0","thumbnail_url":"http://images.zoopla.co.uk/f7f6791d95dadef11b340be2949bd8957079168f_80_60.jpg","description":"Comments","post_town":"Elland","details_url":"http://www.zoopla.co.uk/for-sale/details/26491359","agent_logo":"http://static.zoopla.co.uk/zoopla_static_agent_logo_(120721).png","price_change":[{"date":"2012-10-11 16:45:02","price":"37500"}],"short_description":"We are pleased to offer ...","agent_phone":"01484 954009","outcode":"HX5","image_url":"http://images.zoopla.co.uk/f7f6791d95dadef11b340be2949bd8957079168f_354_255.jpg","last_published_date":"2012-11-21 17:31:46","county":"West Yorkshire","price":"37500","listing_id":"26491359"}

誰かが私を正しい方向に向けることができますか? データソース スキーマ全体がわかりにくいです。JQMでやろうとしていることを説明するのに役立つ場合は、次のようにします

   $.getJSON(serviceURL + 'getproperties.php?postcode=' + postcode + '&minimum_beds=' + minimumBeds + '&minimum_price=' + minimumPrice + '&maximum_price=' + maximumPrice , function(data) {

    $('#propertyList li').remove();

    // Loop through json data and append to table
    listings = data.listing;
    $.each(listings, function(index, property) {

        console.log(property.image_url);
        console.log(property.price);

        $('#propertyList').append('<li><a href="propertydetails.html?id=' + property.listing_id + '">' +
                '<img src="' + property.thumbnail_url + '"/>' +
                '<h6>' + property.property_type + '</h6>' +
                '<p>' + property.displayable_address + '</p>' +
                '<p><strong>&pound;' + property.price + '</strong></p>');

        $('#propertyList').listview('refresh');
    });

});

テンプレート

<!-- Template for Property results, need to change below fields -->
<script type="text/x-kendo-template" id="propertiesListViewTemplate">
    <h4>${property_type}</h4>
    <p>${street_name}</p>
</script>

* 更新 - Pechka の回答用に更新されたコード **

あなたが言及したリンクに従って、(コールバックを使用して)jsonpを返すようにサービスを変更しました。開発者ツールのネットワークタブにjsonpが表示されるようになりました-

jQuery17106739131917711347_1354193012656({"country":"England","re​​sult_count":179,"longitude":-1.83261282209016,"area_name":"Elland","listing":[{"image_caption":""","re​​ntal_prices":{ "per_week":75,"accurate":"per_month","per_month":"325"},"status":"to_rent","num_floors":"0","listing_status":"rent","num_bedrooms" :"1","エージェント名":"ブーコック","緯度":53.68668 ...

ただし、テンプレートには何も入力されていないため、リスト ビューは作成されません (これはおそらく剣道に慣れていないためだと思います)。どこが間違っているかわかりますか?これは JQM に比べて信じられないほど難しいようです...ご協力いただきありがとうございます。

4

3 に答える 3

1

わかりました。エラーが発生する場所を確認するために、このことを単純化しようとしています。
したがって、parameterMapとModelを使用してデータソースを定義します。

var dataModel = new kendo.data.Model.define({
    id: 'listing_id' //specifies a unique key, every other key is mapped automatically
});
var dataSource = new kendo.data.DataSource({
    transport: {
        parameterMap:function (_data, _operation) {
            if (_operation == 'read') {
                return {
                    postcode: 'bd11db' //sending parameters via parameterMap
                };

            }
        },
        read: {
            url: 'http://www.someurl.me/getproperties.php',
            dataType: "jsonp"
        }
    },

    schema: {
        //data: "ResultSet.Result" //data specifies which "node" to use for the actually returned data, since you want the complete object you dont need to specify this
        model: dataModel //using the specified model
    },


    error: function(e) {
        console.log("Error " + e);
    },
    change: function() {
        $("#propertyResultListView").html(kendo.render(template, this.view()));
        console.log(this.view());
    }
});
dataSource.read();

申し訳ありませんが、これらすべてのコールバックを一見しただけではわかりませんが、このデータソースは少なくともサーバーから取得したJSONを返す(またはログに記録する)必要があります

問題を完全に解決することはできないかもしれませんが、正しい方向へのヒントになるかもしれません;)不明な点や(うまくいけば)間違っている点については、遠慮なくコメントしてください。

幸運を :)

于 2012-11-28T10:21:54.833 に答える
1

jsonp (jsonwithpadding)を返すようにサービスを構成することをお勧めします。

このデモでは、jsonp にバインドされた dataSource の動作を確認できます。ブラウザーの開発者ツールのネットワーク タブを使用して、形式の違いを確認してください。

于 2012-11-28T22:56:39.223 に答える