путаница из-за сохранения js-файла в mvc asp.net - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в MVC, я знаю, что я должен держать JS отделенным от своего взгляда, но для некоторых конкретных сценариев я не знаю, как сохранить это разделение, например, у меня есть класс сценария Java, который создает диаграммупосле вызова, в этом сценарии, на мой взгляд, у меня есть вызов ajax, я получаю данные и передаю в функцию, как показано ниже:

pieChartForInterventions($("#pieChart"), result); 

функция находится в отдельном js-файле:

function pieChartForInterventions(chartID,pieChartData) {

      chartID.kendoChart({
      dataSource: {
      data: pieChartData
       },
     series: [{
    type: "pie",
    field: "list",
    categoryField: "mm",
    padding: 0,
    labels: {
        visible: true,
    }
   }],

    tooltip: {
    visible: true,
    template: "${ category }"  }
,
   legend: {
    position: "bottom"
  }
   });

   }

у меня все работает нормально, проблема в том, что когда я хочу иметь событие seriesClick для этой функции, которое возвращает мне серию, по которой я щелкнул, мне нужно это значение, чтобы отправить его обратно в контроллер, чтобы получитьдругие данные, если я запишу все это в файл js, тогда я не смогу иметь значение события seriesClick в моем представлении

seriesClick событие работает так:

chartID.kendoChart({
dataSource: {
    data: pieChartData
},
series: [{
    type: "pie",
    field: "list",
    categoryField: "mm",
    padding: 0,
    labels: {
        visible: true,
    }
}],
seriesClick:onDb,
tooltip: {
    visible: true,
    template: "${ category }"
}
,
legend: {
    position: "bottom"
   }
});

function onDb(e) {    
  var _clicked = e.category;
         }

1 Ответ

0 голосов
/ 11 мая 2018

От вас не требуется , чтобы поместить JS в отдельный файл из вашего представления в любом веб-приложении (не только в ASP.NET MVC).Это, безусловно, хорошая практика во многих отношениях (и необходимая, если у вас есть частичное представление, загруженное через AJAX, потому что там не будут выполняться скрипты), но в равной степени, если у вас есть что-то, относящееся только к этому представлению, IMO приемлемо поместить егов это представление в теге сценария.

Однако есть ли причина, по которой вы не можете предоставить метод обратного вызова для вашего файла JS и использовать его в качестве события seriesClick для этого случая?Примерно так:

JS-файл:

function pieChartForInterventions(chartID,pieChartData,seriesClickCallback) {
  chartID.kendoChart({
    dataSource: {
      data: pieChartData
    },
    series: [{
      type: "pie",
      field: "list",
      categoryField: "mm",
      padding: 0,
      labels: {
        visible: true,
      }
    }],
    tooltip: {
      visible: true,
      template: "${ category }"  
    },
    legend: {
      position: "bottom"
    },
    seriesClick: seriesClickCallback
  });
}

Основной вид:

//callback function
function onDb(e) {    
  var _clicked = e.category;
}

//create pie chart and pass in callback for seriesClick
pieChartForInterventions(someID,someData,onDb);

Таким образом вы можете разделить функциональность диаграммы и сделать ее многократно используемой вотдельный файл, но у вас есть возможность подключить его обратно к коду основного представления, когда вам нужно ответить на событие на графике.Это одна из умных вещей в отношении обратных вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...