2016-10-16 2 views
0

Я новичок в Nativescript и пытаюсь разработать приложение для Android. Я отправляю запрос GET и из ответа, который я создал Listview.Now, я пытаюсь отправить запрос POST, когда элемент из Listview выбран. Но я не могу связать контекст. Итак, мой запрос POST не работает должным образом. Мой вопрос в том, как я могу привязать контекст listview.Nativescript: bindingContext to ListView

Js Контроллер:

var CategoryViewModel = require("../../shared/category_view_model"); 

var fetchModule = require("fetch"); 

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

var observableModule = require("data/observable") 

var page; 

var data; 

var categoryList = new CategoryViewModel([]); 
var pageData = new observableModule.fromObject({ 
    categoryList: categoryList 
}); 



var UserViewModel = require("../../shared/brand_view_model"); 
var user = new UserViewModel(); 



exports.loaded = function(args) { 
    page = args.object; 

    page.bindingContext = pageData; 

    categoryList.empty(); 
    categoryList.load(); 


}; 

function getBrand() { 

user.register(); 

} 
exports.brand=function (args) { 


    getBrand(); 
} 

Вид:

<Page loaded="loaded"> 
    <GridLayout> 
     <ListView items="{{ categoryList }}" itemTap="brand"> 
      <ListView.itemTemplate> 
       <Label text="{{ category }}" horizontalAlignment="left" verticalAlignment="center" /> 
      </ListView.itemTemplate> 
     </ListView> 

    </GridLayout> 
</Page> 

View-модель для запроса POST:

var fetchModule = require("fetch"); 
var Observable = require("data/observable").Observable; 

var observableArray = require("data/observable-array"); 
var goodsList = new observableArray.ObservableArray([]); 
var pageData = require("data/observable").Observable; 




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

    // You can add properties to observables on creation 
    var viewModel = new Observable({ 
     category: info.category || "", 

    }); 

    viewModel.register = function() { 



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


    category: viewModel.get("category"), 


    }) 
}).then(r => { return r.json(); }).then(function (r) { 
    console.log("Success"); 
}, 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; 
} 

module.exports = user; 
+0

Вы можете написать то, что в каком контексте вы получили от функции? или какая ошибка, если что-то есть? –

+0

Как вы видите, я не привязываю контекст для выбора элемента listview. Я не знаю, как. Я уже связываю контекст для создания listview в функции export.loaded. Но как связать контекст, когда элемент выбрано? И ошибка в том, что мои данные сохраняются на моем сервере, но они пусты. –

+0

вполне возможно, поскольку эта строка '; category: viewModel.get (" category ")' из View-model равна 'category:" ",' лучше всего было бы передать элемент bindindContext для регистрации функции из события события –

ответ

3

Вы можете попробовать его таким образом

JS контроллер

exports.brand=function (args) { 
    var list = args.object; 
    var item = list.bindingContext; 
    user.register(item); 
} 

Посмотреть модель

viewModel.register = function(item) { 
    //item points from user.register(item); 
    fetch("http://10.0.2.2:8000/user_signup", { 
     method: "POST", 
     headers: { "Content-Type": "application/json" }, 
     body: JSON.stringify({ 
      category: item, 
     }) 
     }).then(r => { return r.json(); }).then(function (r) { 
       console.log("Success"); 
     }, function (e) { 
      console.log("Error occurred " + e); 
     }); 
}; 
+0

Mr. Marek Maszay, я получаю сообщение об ошибке. –

+0

TypeError: Преобразование круговой структуры в JSON. –

+0

Но, args.index работает правильно. –

Смежные вопросы