MVC3 HTML помощники и JavaScript - PullRequest
3 голосов
/ 21 ноября 2011

У меня есть помощник html в MVC3, который отображает пользовательский раздел html, который используется в качестве элемента управления поиском. Проблема заключается в том, что существует javascript (jquery), который был написан для взаимодействия с элементом управления (его действительно следует использовать JUST для этого элемента управления). Есть ли способ сделать javascript встроенным, чтобы элемент управления продолжал иметь функциональность javascript. (Создав помощника, мы можем контролировать структуру html и упростить написание javascript. Это стандартизирует использование элемента управления во всем приложении).

ех.

<div>
@Html.SearchControl("searchControlSelector")
</div>

<script>
     $("searchControlSelector").timeout();
<script>

Я хочу иметь возможность установить функцию 'timeout' при вызове @ Html.SearchControl ([некоторые параметры]), чтобы javascript и помощник были объединены, и пользователям помощника не нужно было беспокоиться о том, какие селекторы они следует использовать при вызове «тайм-аут». Кто-нибудь знает, как этого добиться? Есть ли лучший способ справиться с этим?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Трудно создать полностью повторно используемый помощник html с одним общим файлом javascript.

Сначала невозможно вывести только один <script>$(".searchControl").timeout()</script> кодовый блок на страницу без использования дополнительных вызовов методов на странице макета и т. Д..

Вы можете добавить свой собственный специфический для элемента управления атрибут данных, такой как data-search-control, и использовать его в селекторах, таких как $("input[data-search-control]").timeout(), чтобы различать только HTML, созданный вашим помощником.Вы можете блокировать несколько скриптов на странице, не забывайте, что они будут выполняться несколько раз, поэтому вам нужно позаботиться о предотвращении многократного выполнения.Вы можете связать некоторые данные с узлами HTML, уже обработанными сценарием, используя, например, метод jQuery $("").data().Или, как вариант, вы можете проверить, объявлен ли указанный объект в глобальной области видимости, и если это так, ничего не делать, иначе объявить его и вызвать ваш метод.

1 голос
/ 21 ноября 2011

Когда я хочу сделать что-то подобное, я стараюсь сделать это как можно проще.Вот некоторый код, который звучит так, как будто бы он отвечает всем требованиям.

using System;
using System.Text;
namespace MvcApplication1.Helpers
{
    public class Html
    {
        public static string SearchControl(string selector)
        {
            StringBuilder returnString = new StringBuilder();
            //put your existing code here.
            returnString.Append(String.Format("<label >{0}</label>", selector));
            //just add the JS as string, (wrapped in a 'ready' if you need that)
            returnString.Append(String.Format("<script>$(function(){$(\"{0}\").timeout();});<script>", selector));
            return returnString.ToString();
        }
    }
}

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

...