2017-10-20 15 views
0

バインドされたテキストフィールドから値を取得できません。タブテンプレートを使用しました。 Microsoft Androidエミュレータで。メインタブページビューモデルに追加する必要があるものがありますか?Nativescriptタブページのテキストフィールド

何らかの理由viewModel.get( "検索")を見る

<GridLayout class="page-content"> 
    <StackLayout orientation="vertical"> 
     <Label class="page-icon fa" text="&#xf002;"></Label> 
     <TextField id="txtSearch" text="{{ search }}" hint="Search" keyboardType="email" autocorrect="false" autocapitalizationType="none" /> 
     <Button text="Sign in" tap="searchClick" /> 
    </StackLayout> 
</GridLayout> 
var SearchViewModel = require("./search-view-model"); 

var svm = new SearchViewModel(); 

function onLoaded(args) { 
    var component = args.object; 
    component.bindingContext = new SearchViewModel(); 
} 

exports.searchClick = function() {  

    svm.searches() 
     .catch(function(error) { 
      console.log(error); 
      dialogsModule.alert({ 
       message: "Unfortunately we could not find your account.", 
       okButtonText: "OK" 
      }); 
      return Promise.reject(); 
     }) 
     .then(function() { 
      //frameModule.topmost().navigate("views/list/list"); 
     }); 
}; 

exports.onLoaded = onLoaded; 

モデル は何も返しません。ボタンがうまくいきます。

const observableModule = require("data/observable"); 
var fetchModule = require("fetch"); 

//Info is the returning object 
function SearchViewModel(info) { 
    info = info || {}; 

    var viewModel = new observableModule.fromObject({ 
      search: info.search || "" 
    }); 

    viewModel.searches = function() { 
     var test = viewModel.get("search"); 
     return fetchModule.fetch(config.apiUrl + viewModel.get("search"), { 
      method: "GET", 
      headers: { 
       "Content-Type": "application/json" 
      } 
     }) 
     .then(handleErrors) 
     .then(function(response) { 
      return response.json(); 
     }) 
     .then(function(data) { 
      config.token = data.Result.access_token; 
     }); 
    }; 

    return viewModel; 
} 

答えて

0

あなたが簡単に使用することができますthis.search、 それとも、this.get("search")

編集を使用することができます。ファイルの後ろにあなたのコードではサイドノート、 にも、あなたが作成している

var svm = new SearchViewModel();

しかし、あなたはbindingContextとしてsvmを割り当てておらず、代わりにSearchViewModelの新しいインスタンスを作成しています。後で予期しない動作が発生する可能性があります。

+0

this.get( "search")を使用して差はありません 申し訳ありませんが、私はsvmを使用するクリックイベントを貼り付けませんでした。私はそれを追加します。その場所にコンポーネントを使用する別の方法はありますか? – Jason

+0

これだけです。あなたのコードの背後には、現在の行の代わりに 'component.bindingContext = svm;'と書いてください。 –

+0

実際にそれも試みました。私のonLoaded関数がヒットしないか、少なくとも私のブレークポイントに当たっていないように見えます。だからバインディングは決して起こらない。 – Jason

関連する問題