2014-09-08 2 views
2

저는 검도와 함께 i18next 라이브러리를 사용하고 있으며 내 앱의 검도 UI 웹 부분에서 예상대로 작동하는 데 문제가 없었지만 모바일은 다른 이야기입니다. 내가 init 함수에서 내 i18n 함수를 호출 할 수 있다고 생각하고 "데이터 - i18n"내 템플릿의 특성을 아무 문제없이 채울 수 있지만 ...보기가 끝날 때까지 뷰 요소에 액세스 할 수없는 것처럼 보입니다. 완전히 내장/바운드입니다 ... 그래서, ListView에 대한 "DataBound"이벤트에 i18n 코드를 넣으려고했지만 목록이 렌더링/새로 고침 될 때마다 불필요한 코드가 많이 실행되는 것처럼 보입니다.검도 모바일에서 문자열을 올바르게 현지화하는 방법은 무엇입니까?

더 나은 방법에 대한 생각? 나는 이것 때문에 레이아웃을 현지화하는 길조차 시작하지 않았다.

다음은 뷰 자체에 대한 내 템플릿입니다 :

<div id="dashboard-meeting" data-role="view" data-model="dashViewModel" data-bind="events:{init:meetingListInit,show:meetingListShow}" data-layout="drawer-layout" data-title="By Meeting"> <ul id="meeting-list" class="meetingList"></ul> <div class="no-data" style="display:none;">No Data</div> </div>

이 목록의 행 항목 템플릿입니다 ...

<script type="script/x-kendo-template" id="meeting-item"> 
    <a data-item-id="#=meetingID#" href="\#meeting-details?id=#=meetingID#" data-transition="slide:left"> 
    <h3 class="time">#= startTime #</h3> 
    <h3 class="counts"><span class="hc" data-i18n="dashboard.headCountText"></span>: #=headCount# | Total: #=totalCount#</h3> 
    <h2>#=meetingName#</h2> 
    </a> 
</script> 

그리고 여기 내 뷰 모델입니다 :

var dashViewModel = kendo.observable({ 
    headCountText : "Head Count", 
    meetingListInit : function(e){ 
     var meetingList = $("#meeting-list").kendoMobileListView({ 
      dataSource: bymeetingData, 
      pullToRefresh: true, 
      template: $('#meeting-item').html(), 
      dataBound: function(e){ 
       console.log("Data Bound"); 
       i18n.init(lang_options).done(function() { 
        //dashViewModel.set("headCountText", $.t("dashboard.headCount")); 
        //console.log("this list init'd" , $.t("dashboard.headCount")) 
        //$("#meeting-list").i18n(); 
        $(".hc").text($.t("dashboard.headCount")); 
       }); 
      } 
     }).data("kendoMobileListView"); 
    }, 
    meetingListShow : function(e){ 
     //bymeetingData.read(); 
     $("#meeting-list").data("kendoMobileListView").refresh(); 
    } 
}); 

내 init 코드의 내 의견에서 볼 수 있듯이 초기화 함수를 통해 지역화 된 데이터 모델 텍스트 문자열에 "head count"에 대한 목록 항목 요소의 텍스트를 바인딩하려고했습니다. 하지만 그건 묶어 두지 않을 것입니다. 그래서 나는 그것을 포기하고이 길을갔습니다.

답변

1

MVVM 바인딩 및 초기화는 실제로보기 initshow 이벤트 전에 발생하므로 이러한 이벤트 중 하나에서 i18n 내용을 잠재적으로 변경할 수 있다고 생각합니다.


당신은 실제로 단지 i18next 같은 다른 라이브러리를 사용하는 대신 국제화를 처리 할 text MVVM 바인더를 사용할 수 있습니다.

<span data-bind="text: strings.hello"></span> 

내 뷰 모델은 "문자열"해시있다 (즉, 실제로 JSON으로 시작시로드)

var english = { 
    hello: "Hello" 
}; 

var spanish = { 
    hello: "Hola" 
}; 

var viewModel = kendo.observable({ 
    strings: english 
}); 

function enEspanolPorFavor() { 
    viewModel.set("strings", spanish); 
} 

viewModel.set("strings", ...)들은 언어 변화를 갱신해야 text 바인더를 통지한다.

+0

안녕하세요, 저는 검도 스틱으로 가득 찼으므로 실제로 귀하의 웹 사이트를 수색하고있었습니다. 그러나 나는 당신이 제안하고있는 것의 다른 버전을 시도했다고 확신합니다 (비록 당신이 더 간단 하긴하지만). 내 모임 항목 템플릿을 data-bind = "text : headCount"로 내 뷰 모델의 텍스트에 몇 가지 이유로 가져올 수 없었습니다 ... 왜 그런 식으로 작동하지 않을지에 대한 생각은 무엇입니까 ?? – btbJosh

+0

'data-role = "listview"'로 선언적으로하는 대신 위젯을 초기화하기 위해'.kendoMobileListView()'를 사용했기 때문이라고 생각합니다. 나는 위젯이 MVVM 바인딩/초기화되지 않은 경우 자식 요소가 MVVM을 바인딩하지 않는다고 생각합니다. – CodingWithSpike

+0

아! 나는 그 길로 가고 그 선언적 접근법을 사용하여 몇 가지 것을 시도하고 다시보고 할 것이다. – btbJosh

관련 문제