标签: viewmodel

如何将对象分配给smarty模板?

我在PHP中创建了一个模型对象

class User {
  public $title;

  public function changeTitle($newTitle){
    $this->title = $newTitle; 
  }
}
Run Code Online (Sandbox Code Playgroud)

如何通过分配对象来公开smarty中的User对象的属性?

我知道我能做到这一点

$smarty->assign('title', $user->title);
Run Code Online (Sandbox Code Playgroud)

但我的对象有超过20多个属性.

请指教.

编辑1

以下对我不起作用.

$smarty->assign('user', $user);
Run Code Online (Sandbox Code Playgroud)

要么

$smarty->register_object('user', $user);
Run Code Online (Sandbox Code Playgroud)

然后我试着 {$user->title}

一切都没有出来.

编辑2

我目前只想在smarty模板中输出对象的公共属性.对不起,如果我把任何一个与功能混淆.

谢谢.

php smarty variable-assignment viewmodel

1
推荐指数
1
解决办法
1万
查看次数

如何在asp.net-MVC2中传递一个列表

使用asp.net-4.0我这样做了:

slideshow.aspx
<div class="wrapCarousel">  
    <div class="Carousel">  
       <% foreach(var image in Images) { %>
       <div class="placeImages">
        <img width="150px" height="150px" src="../Img/<%=image.TnImg%>" alt="<%=image.Name%>" />
        <div class="imageText">   
         <%=image.Name%>
        </div>
       </div>
       <% } %>
   </div>
Run Code Online (Sandbox Code Playgroud)

然后像这个slideshow.aspx.cs中的图像在后面的代码中:

    public class Image
    {
        public string TnImg { get; set; }
        public string Name { get; set; }
        public string City { get; set; }
        public string RefPlace { get; set; }
        public string RefInfo { get; set; }
        public string RefInfoDynamic { get; set; }

        public Image(string TnImg, …
Run Code Online (Sandbox Code Playgroud)

c# viewmodel asp.net-mvc-2

1
推荐指数
1
解决办法
1112
查看次数

UpdateModel不通过ViewModel更新模型,也不从DropDownListFor更新属性

我正在尝试设置一个编辑视图,我有一个文本框和DropDownListFor.我已经找到了填充DDLF的方法,并且渲染和发布的值是正确的,但我似乎无法让模型正确更新.

我想要更新的对象是从LINQtoSQL生成的,在数据​​库中它有外键列.在LINQtoSQL类中导致"包含"关系.我可以访问代表DB中列的ID属性,以及它所代表的对象.

        zupanija = new Zupanija();       //object that needs to be updated
        zupanija.Drzava;                 //object that i want to change to make the update
        zupanija.DrzavaID;               //Property linked to object that should change
Run Code Online (Sandbox Code Playgroud)

我想出更新的唯一方法是从DDLF获取值并使用它来获取我想要更改的对象,如下所示:

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
         var zupanija = repo.ZupanijaById(id);
         var drzava = new repoDrzava().DrzavaById(Convert.ToInt32(collection["Zupanija.DrzavaID"]));
         zupanija.Drzava = drzava;
        }
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试更新这样的ID字段时,我得到以下错误:

           zupanija.DrzavaID = Convert.ToInt32(collection["Zupanija.DrzavaID"]);
Run Code Online (Sandbox Code Playgroud)

错误:抛出新的System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();

在我看来,这是非常糟糕的方式,我试图让UpdateModel工作.

updatemodel viewmodel asp.net-mvc-3

1
推荐指数
1
解决办法
8075
查看次数

HttpPost上的ASP.NET MVC DropDownList值

我正在关注ASP.NET MVC的这个教程,特别是它声明提供"MovieType"Razor View 的String 如下:@Html.DropDownList("MovieType")将提供DropDownList的键以查找ViewBag类型的属性IEnumerable<SelectListItem>.

这很好用.

但是,我无法获取用户在带有[HttpPost]属性的方法上选择的值.

这是我的代码和迄今为止我尝试过的内容.

调节器

public class ProductController : Controller 
{
    private readonly ProductRepository repository = new ProductRepository();

    // Get: /Product/Create
    public ActionResult Create()
    {
        var categories = repository.FindAllCategories(false);
        var categorySelectListItems = from cat in categories
                                      select new SelectListItem()
                                          {
                                              Text = cat.CategoryName,
                                              Value = cat.Id.ToString()
                                          };
        ViewBag.ListItems = categorySelectListItems;
        return View();
    }

    [HttpPost]
    public ActionResult Create(Product product)
    {
        /** …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc viewmodel html.dropdownlistfor razor asp.net-mvc-4

1
推荐指数
1
解决办法
2万
查看次数

Knockout ViewModel分离,最新方法/最佳实践是什么?

我刚刚开始搞乱Knockout JS,我有以下的观点(例子).

我有一个游客列表,这个列表有CRUD方法 - 一切都很棒.现在,当我点击一个游客时,将会显示一个更详细的描述 - 这是一个新的AJAX调用服务器的信息.

我的问题是,我应该有一个包含我的1个主视图模型TouristsViewModelTouristsInfoViewModel-这意味着TouristsViewModel要与主为了改变耦合TouristsInfoViewModel,或者我应该TouristsViewModel实例化TouristsInfoViewModel,并调用ko.applyBindings

我看过Knockout-postbox,但我想避免引入过多的第三方插件.

总结一下:在能够在它们之间共享数据的同时,分离视图和视图模型的一般方法是什么?

dry mvvm separation-of-concerns viewmodel knockout.js

1
推荐指数
1
解决办法
1129
查看次数

根据MainWindow事件更新viewmodel

我有一个UdpClient,在我的MainWindow上触发了一个DataRecevied事件:

public partial class MainWindow : Window
{
    public static YakUdpClient ClientConnection = new YakUdpClient();
    public ClientData;

    public MainWindow()
    {
        InitializeComponent();
        Loaded += OnLoaded;
    }

    private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
    {
        ClientData = new ClientData();
        ClientConnection.OnDataReceived += ClientConnectionOnDataReceived;
    }

    private void ClientConnectionOnDataReceived(object sender, MessageEventArgs messageEventArgs)
    {
        ClientData.Users = messageEvenArgs.ConnectedUsers;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ClientData和User类如下所示:

public class ClientData
{
    public List<User> Users {get;set;)
}

public class User
{
    public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在我的MainWindow上,我有一个名为UserControl的调用UserListViewViewModelUserListViewModel

ViewModel看起来如下:

public class UserListViewModel: BindableBase …
Run Code Online (Sandbox Code Playgroud)

wpf prism viewmodel

1
推荐指数
1
解决办法
280
查看次数

Android架构组件:ViewModel如何观察存储库中的LiveData

我正在研究Android架构组件,我有点困惑.在示例中,他们使用存储库并声明ViewModel观察到存储库的数据源内的更改.我不明白数据源中的更改是如何推送到ViewModel的,因为我看不到ViewModel中的任何代码将它们订阅到存储库.类似地,片段观察ViewModel的LiveData,但它们实际上订阅了LiveData:

 // Observe product data
    model.getObservableProduct().observe(this, new Observer<ProductEntity>() {
        @Override
        public void onChanged(@Nullable ProductEntity productEntity) {
            model.setProduct(productEntity);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我在ViewModels中看不到任何类型的订阅来观察存储库.我错过了什么吗?

android mvvm viewmodel android-livedata android-architecture-components

1
推荐指数
1
解决办法
2321
查看次数

无法使用集合初始值设定项初始化类型,因为它没有实现“System.Collections.IEnumerable”

我有 3 个主菜单实体。和子菜单。我创建了菜单视图模型。

我的实体:

主菜单.cs:

public UstMenuler()
{
    AltMenuler = new HashSet<AltMenuler>();
}

public int ID { get; set; }
public string Name { get; set; }
public bool AktifMi { get; set; }
public int YetkiID { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
public virtual Yetkilendirme Yetkilendirme { get; set; }
public virtual ICollection<AltMenuler> AltMenuler { get; set; }
Run Code Online (Sandbox Code Playgroud)

子菜单.cs:

public partial class AltMenuler
{      
    public AltMenuler()
    { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc controller view viewmodel

1
推荐指数
1
解决办法
5457
查看次数

会议室数据库Livedata getValue()返回null

我试图使用LiveData和viewmodel从房间中获取自定义对象数据的列表。使用Livedata的getValue()方法时,返回null,但获取列表直接显示实际数据。如何在Viewmodel类中使用LiveData获得Period类的列表。

实体类

@Entity
public class Period {

@PrimaryKey
@NonNull
String header;
@TypeConverters(WritterConverter.class)
ArrayList<Writter> writters;

public Period(String header, ArrayList<Writter> writters) {
    this.header = header;
    this.writters = writters;
}

public String getHeader() {
    return header;
}

public ArrayList<Writter> getWritters() {
    return writters;
}


}

@Entity
public class Writter {

String birth;
String death;
String name;
ArrayList<String> novels;

public Writter(){}

public Writter(String birth, String death, String name, ArrayList<String> novels) {
    this.birth = birth;
    this.death = death;
    this.name = name;
    this.novels = novels;
} …
Run Code Online (Sandbox Code Playgroud)

android dao viewmodel android-room android-livedata

1
推荐指数
1
解决办法
3203
查看次数

在 MVVM 中处理 ViewModel 和 Fragment 中的数据

我看过很多教程,但并没有真正让自己正确理解如何处理 MVVM 中的某些情况。

假设有一个从DAO使用的a 获取数据的存储库Room

class Repository(){

  fun getItems() = itemsDAO.getItems()

}
Run Code Online (Sandbox Code Playgroud)

查询 Repository 的 ViewModel

class FragmentViewModel:ViewModel(){

    val items = repository.getItems()

    fun updateItem(Item item){
       repository.updateImte(itemm)
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个片段

class MyFragment:Fragment(){

   //onViewCreated
   viewModel.items.observe(...){
        //if result, update the views
     }

  buttonUpdateItem.setOnClickListener{
    viewModel.updateItem(Item item)    
  }

}
Run Code Online (Sandbox Code Playgroud)

这是我从教程中理解的方法。基本上我有一些事情需要澄清,我想寻求你的帮助。

一种。鉴于ViewModel如果用户旋转设备并重新创建片段的这种实现,这是否意味着observe将在添加时再次查询数据库?我正在考虑 ViewModel 的更新版本,例如

  class FragmentViewModel:ViewModel(){
        private final var itemsObservable;


       init {
           itemsObservable = repository.getItems()
        }

       fun items(){
           return itemsObservable
       }

        fun updateItem(Item item){
           repository.updateImte(item)
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我是对的,这应该允许从 db …

android mvvm viewmodel android-viewmodel

1
推荐指数
1
解决办法
2382
查看次数