2016-11-02 7 views
1

Итак, я с помощью таймера, который я просил о в этом вопросе, как отсчитывать: How to stop timer.setinterval with a tap event or leaving page in nativescriptNativescript getViewById не обновляется для подсчета вниз

Счетчик работает, все это время я использую console.log проверить если он работает и да, но я хочу, чтобы он отображался в xml для пользователя этого приложения. Но счет не обновляется в xml.

Вот код для просмотра:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded" navigatedTo="navigatedTo" navigatingFrom="onNavigatingFrom" actionBarHidden="true"> 

    <DockLayout orientation="horizontal" horizontalAlignment="center" backgroundColor="black" color="white"> 
     <Label text="Time remaining: " dock="left" margin="5" /> 
     <Label id="timeCount" text="" loaded="pageLoaded"></Label> 
    </DockLayout>  
</Page> 

И JS файл за:

var time; 
var timeKeep = vm.time; 
var count = 0; 

function timeCountDown() { 
    time = vm.time--;     //this is the value that i need 
    console.log("i is " + time); 
} 

countId = timer.setInterval(() => { 
    timeCountDown(); 
    count += 1; 
    if (count === timeKeep) { 
     timer.clearInterval(countId); 
     dialogs.alert({ 
      title: "Time Up!", 
      message: "You did not finish the test in time.", 
      okButtonText: "OK" 
     }); 
     aemnavigation.goResults(vm.correct); 
    } 
}, 1000); 



//the two lines below is how i get it to show on the xml 

TimeCountScore = page.getViewById("timeCount"); 
TimeCountScore.text = time; 

Значение времени получает мнение, но это не обновляется, имеет значение отсчитывает. Я console.log (время), чтобы убедиться, что он все еще считается.

+0

, чтобы иметь возможность обновить 'свойства текста label' вы должны использовать' Binding' данных и для связывания свойства text метки с идентификатором 'id =" timeCount ". Подробнее об этом вы можете найти в документации здесь - http://docs.nativescript.org/core-concepts/data-binding#binding-in-xml, где вы также найдете пример, как это сделать. –

ответ

1

Вы должны указать data binding, который наследует класс Observable, когда свойство изменено, оно также обновит XML. В вашем случае, если вы все еще хотите сохранить свою практику вы можете поместить label.text внутри интервала, чтобы получить его обновление:

TimeCountScore = page.getViewById("timeCount"); 

countId = timer.setInterval(() => { 
    TimeCountScore.text = time; 
}, 1000); 
+0

большое спасибо. Теперь он работает так, как вы это делали. – Joel

+0

@ Николей Цонев, спасибо тоже. Я прочитал документы о привязке данных ранее. Просто не удалось заставить его работать с использованием этого метода, следовательно, использовать метод getViewById. Думаю, мне придется это выяснить позже. – Joel

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

  • Нет связанных вопросов^_^