2016-10-13 1 views
1

nativescript android appを開発中に問題が発生しています。私はPOSTリクエストを送信しようとしています。そのリクエストからレスポンスを取得しようとしています。このレスポンスを使用して、ListView 。私は正常にPOSTリクエストを送信し、server.Butの問題からの応答は、私が埋めることができないで持っているlistview.HereはNativescript表示するデータを渡す

<Page loaded="loaded"> 
    <StackLayout> 
     <Image src="res://logo" stretch="none" horizontalAlignment="center"/> 

     <TextField text="{{ name }}" id="name" hint="Name" /> 

     <TextField text="{{ email }}" id="email" hint="E-mail" /> 

     <TextField text="{{ password }}" secure="true" hint="Password" /> 

     <Button text="Sign Up" tap="register" /> 
    </StackLayout> 
</Page> 

Register.js Register.xml私のコード -

です

var dialogsModule = require("ui/dialogs"); 
var frameModule = require("ui/frame"); 

var UserViewModel = require("../../shared/view-models/user-view-model"); 
var user = new UserViewModel(); 

exports.loaded = function(args) { 
    var page = args.object; 
    page.bindingContext = user; 
}; 

function completeRegistration() { 
    user.register() 
     .then(function() { 
      dialogsModule 
       .alert("Your account was successfully created.") 
       .then(function() { 
        frameModule.topmost().navigate("views/list/list"); 
       }); 
     }).catch(function(error) { 
      console.log(error); 
      dialogsModule 
       .alert({ 
        message: "Unfortunately we were unable to create your account.", 
        okButtonText: "OK" 
       }); 
     }); 
} 

exports.register = function() { 
    completeRegistration(); 
}; 

ユーザービューmodel.js

function User(info) { 
    info = info || {}; 


    var viewModel = new Observable({ 
     name: info.name || "", 
     email:info.email || "", 
     password: info.password || "", 
    }); 

    viewModel.register = function() { 



    return fetchModule.fetch("http://10.0.2.2:8000/user_signup", { 
    method: "POST", 
    headers: { "Content-Type": "application/json" }, 
    body: JSON.stringify({ 

      name: viewModel.get("name"), 
      email:viewModel.get("email"), 
      password:viewModel.get("password"), 
     }).then(r => { return r.json(); }).then(function (r) { 


    for(var i=0;i<r.length;i++){ 

     var goods={name:r[i].name} 
     goodsList.push(goods); 


    }; 
    console.log(goodsList); 

}, function (e) { 
     console.log("Error occurred " + e); 
    }); 


    }; 

     return viewModel; 
} 

function handleErrors(response) { 
    if (!response.ok) { 
     console.log(JSON.stringify(response)); 
     throw Error(response.statusText); 
    } 
    return response; 
} 


function pageLoaded(args) { 
     var page = args.object; 
     pageData.set("goodsList", goodsList); 

     page.bindingContext = pageData; 
    } 

module.exports = User; 

リストビュー

<Page loaded="pageLoaded"> 
    <GridLayout> 
     <ListView items="{{ goodsList }}"> 
      <ListView.itemTemplate> 
       <Label text="{{ name }}" horizontalAlignment="left" verticalAlignment="center"/> 
      </ListView.itemTemplate> 
     </ListView> 
    </GridLayout> 
</Page> 

答えて

1

あなたregister()関数は、要求から応答を解決する約束を返してください。その後

viewModel.register = function() { 
    return new Promise<any>((resolve, reject) => { 
     fetchModule.fetch("http://10.0.2.2:8000/user_signup", { 
     method: "POST", 
     headers: { "Content-Type": "application/json" }, 
     body: JSON.stringify({ 

      name: viewModel.get("name"), 
      email:viewModel.get("email"), 
      password:viewModel.get("password"), 
     }).then(r => { return r.json(); }).then(function (r) { 


     for(var i=0;i<r.length;i++){ 
      var goods={name:r[i].name} 
      goodsList.push(goods); 
     }; 
    resolve(goodsList); 
}, function (e) { 
     reject(e); 
}); 

中:あなたが渡すことができる場所その後、新しいページへのコンテキストオブジェクト(この場合の応答である)最上位を使用して()User-view model.js

をナビゲートNavigationEntryありregister.js:リストページのコントローラで、その後

function completeRegistration() { 
    user.register() 
     .then(function(result) { 
      dialogsModule 
       .alert("Your account was successfully created.") 
       .then(function() { 
        frameModule.topmost().navigate({ 
         moduleName: "view/list/list", 
         context: {goodsList: result} 
        }); 
       }); 
     }).catch(function(error) { 
      console.log(error); 
      dialogsModule 
       .alert({ 
        message: "Unfortunately we were unable to create your account.", 
        okButtonText: "OK" 
       }); 
     }); 
} 

function pageLoaded(args) { 
    var page = args.object; 
    var context = page.navigationContext; 
    page.bindingContext = context; 
} 
+0

Dinh Le氏、申し訳ありませんが、エラーが発生しています。 resolveは定義されていません。 –

+0

氏Dinh Le、今私は間違いを犯していませんが、私もリストビューに移動することはできません。 –

+0

リストビューのページで正しいコントローラを持っていることを確認してください –

関連する問題