2016-11-04 66 views
0

我有一個JavaScript函數調用getRoute應該從我的MVC控制器採取一個route對象的列表,並將它們插入我的看法下拉菜單。試圖循環通過JSON數據在我的JavaScript(ASP.Net)

下面是函數:

function getRoute(selectedPart) { 
    var $form = $('#form-create'), 
     $routeDropdown = $('#dd-route'), 
     structure = _.template($('#tmpl-route-list').html()); 

    if (selectedPart) { 
     $form.block(); 
     $.get('@Url.Action("getRouteFromPart", "wip")', { 
      partId: selectedPart 
     }).done(function (response) { 
      $form.unblock(); 

      var html = structure({ routes: response }); 
      $routeDropdown.html(html); 
     }); 
    } else { 
     $routeDropdown.html(structure({ routes: null })); 
    } 
} 

說明

selectedPart是從不同的下拉(這裏未示出)的值。根據選擇的內容,getRoute將點擊"wip"控制器並使用它的「getRouteFromPart"」操作返回一個名爲routes的路由對象列表。然後它應該通過名爲#tmpl-route-list的underscore.js模板將該列表放入下拉菜單。

下面是模板代碼:

<% if (routes) { %> 
    <% foreach(var route in routes.routes) { %> 
     <option value="<%= route.routesId %>"> 
      <% route.routesName %> 
     </option> 
    <% } % > 
<% } %> 

說明

routes.routes路線列表裏面的路線響應對象。我試圖循環訪問該列表,並將每個route對象的routeIdrouteName放入其自己的<option>標記中以顯示下拉列表。

不用說,它不起作用。在JavaScript控制檯,它給了我錯誤「意外的令牌var」。如果我從foreach中刪除'var',它會顯示「Unexpected token {」。

注:我在網站的另一部分幾乎有完全相同的設置,並且完美地工作。唯一的區別是那裏它只是一個對象放在下拉列表和這裏我想用對象列表來做到這一點。很明顯,我的循環或某事有什麼問題,但我不知道如何解決它。

有人可以幫忙嗎?

回答

0

您的模板看起來錯了。 電話_.forEach在哪裏?回調在哪裏?

請看這裏:https://jsfiddle.net/ub25v2c6/1/(打開控制檯)。

我將模板更改爲下面的代碼片段,它編譯得很好。

var template = ` 
    <% if (routes) { %> 
     <% _.forEach(routes.routes, function (route, i) { %> 
      <option value="<%= route.routesId %>"> 
       <% route.routesName %> 
      </option> 
     <% }); %> 
    <% } %> 
`;