2014-09-24 2 views
-1

Я новичок в TypeScript, помогите решить проблему ниже о недопустимой дате в Chrome.Неверная дата в Chrome для машинописных файлов

У меня есть ListViewModel и имеет код, как:

module ListView { 
    export class ListViewModel{ 
     public createdDate: Date; 
     public name: string; 
      constructor(listId:number) { 
       for(var i = 0; i < dataContext.List.length; i++) { 

        if(listId == dataContext.List.id){ 

         // PROBLEM IS HERE: 
         this.createdDate = dataContext.Lists[i].createdDate; 
         this.name = dataContext.Lists[i].name; 
        } 
       } 
      } 
     } 
    } 

и у меня есть контроллер, который, чтобы получить весь список на мой взгляд, как

module ListController { 
    public aList : Array<ListViewModel>; 
     export class ListController(){ 
      aList = []; 
      for(var i = 0; i < 2; i++) { 
       var newList = new ListViewModel(i); 
       aList.push(newList); 
      } 
     } 
    } 

и DataContext создается вручную в перспективе. ts файл, например:

Lists : [ 
    new List(1, new Date(2014,1,2), "test1"), 
    new List(1, new Date(2014,06,07),"test2") 
] 

и я хочу показать список в HTML, и у меня есть прав Контроллер набора = ListController для этой страницы, как:

<ul> 
    <li ng-repeat="n in aList"> 
    <label>Name: {{n.name}}</label> 
    <label>Date: {{n.createdDate}}</label> 
    </li> 
</ul> 

Проблемы есть: список не отображается, но в Chrome консоли нет какой-либо ошибка. При отладке в ListModelView, this.createdDate = dataContext.Lists[i].createdDate; является недопустимой датой, но имя правильно установлено.

Большое спасибо за то, что посмотрели.

+0

Либо опубликовать фактическое код, который вы используете, или опубликовать фактический автономный пример. Ручная транскрибированная версия того, что вы считаете минимальным примером, имеет тонну синтаксических ошибок и отсутствует информация, которая может быть связана с этой проблемой (например, откуда берется «dataContext»?) –

+0

Спасибо Райан за ответ, у меня уже есть исправить ошибки синтаксиса:). На данный момент у меня нет реальных данных, поэтому я создал вручную dataContext в run.ts для тестирования. Итак, код для двух модулей в моем проекте одинаковый, но я только не публикую весь html-файл – echo

+0

, что такое 'List'? – basarat

ответ

0

Я подозреваю, что проблема заключается в следующем:

var date = new Date(2014,06,07); 

Ваши литералы 06 и 07 являются значения в восьмиричном, а не десятичные числа.

Чтобы создать дату, используйте десятичные, например:

var date = new Date(2014, 6, 7); 

Браузеры обычно сортировать это для вас, но машинописи компилятор будет жаловаться на это, если вы ориентируетесь ECMAScript 5 или выше.

Если у вас нет проблем с компилятором, вы можете вернуться к своему коду, чтобы решить простые синтаксические проблемы, о которых должен также предупредить TypeScript.

Вот рудиментарная бегущая версия, с некоторыми битами, обращенными к вашему вопросу. Я дал ему быстрый поворот в Chrome, и дата заносится в журнал правильно.

class List { 
    constructor(public id: number, public createdDate: Date, public name: string) { 

    } 
} 

var dataContext = { 
    Lists : [ 
     new List(1, new Date(2014,1,2), "test1"), 
     new List(1, new Date(2014,6,7),"test2") 
    ] 
}; 

module ListView { 
    export class ListViewModel { 
     public createdDate: Date; 
     public name: string; 
     constructor(listId:number) { 
      for(var i = 0; i < dataContext.Lists.length; i++) { 

       console.log(dataContext.Lists[i].createdDate); 

       if(listId == dataContext.Lists[i].id) { 

        // PROBLEM IS HERE: 
        this.createdDate = dataContext.Lists[i].createdDate; 
        this.name = dataContext.Lists[i].name; 
       } 
      } 
     } 
    } 
} 


module ListController { 
    export var aList : Array<ListView.ListViewModel>; 
    export class ListController{ 
     public aList = []; 
     constructor() { 
      for(var i = 0; i < 2; i++) { 
       var newList = new ListView.ListViewModel(i); 
       aList.push(newList); 
      } 
     } 
    } 
} 

var lv = new ListView.ListViewModel(1); 

Сниппет с скомпилированного JavaScript ниже (хотя я изменил его для входа на видимую страницу, а не на консоли):

var List = (function() { 
 
    function List(id, createdDate, name) { 
 
     this.id = id; 
 
     this.createdDate = createdDate; 
 
     this.name = name; 
 
    } 
 
    return List; 
 
})(); 
 

 
var dataContext = { 
 
    Lists: [ 
 
    new List(1, new Date(2014, 1, 2), "test1"), 
 
    new List(1, new Date(2014, 06, 07), "test2")] 
 
}; 
 

 
var ListView; 
 
(function (ListView) { 
 
    var ListViewModel = (function() { 
 
     function ListViewModel(listId) { 
 
      for (var i = 0; i < dataContext.Lists.length; i++) { 
 
       document.getElementById('output').innerHTML += dataContext.Lists[i].createdDate + '<br />'; 
 

 
       if (listId == dataContext.Lists[i].id) { 
 
        // PROBLEM IS HERE: 
 
        this.createdDate = dataContext.Lists[i].createdDate; 
 
        this.name = dataContext.Lists[i].name; 
 
       } 
 
      } 
 
     } 
 
     return ListViewModel; 
 
    })(); 
 
    ListView.ListViewModel = ListViewModel; 
 
})(ListView || (ListView = {})); 
 

 
var ListController; 
 
(function (_ListController) { 
 
    _ListController.aList; 
 
    var ListController = (function() { 
 
     function ListController() { 
 
      this.aList = []; 
 
      for (var i = 0; i < 2; i++) { 
 
       var newList = new ListView.ListViewModel(i); 
 
       _ListController.aList.push(newList); 
 
      } 
 
     } 
 
     return ListController; 
 
    })(); 
 
    _ListController.ListController = ListController; 
 
})(ListController || (ListController = {})); 
 

 
var lv = new ListView.ListViewModel(1);
<div id="output"></div>

+0

Но 06 и 07 (восьмеричные) равны 6 и 7. :) – Paleo

+0

@Tarh Это не проблема JavaScript ... TypeScript предоставляет предупреждение. – Fenton

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